2010-12-12 126 views

回答

2

不幸的是我能得到它的工作的唯一方法是创建一个文件jass.conf并使用指定它可以:

  • 在Tomcat的Java参数:

    -Djava.security.auth.login.config==c:\\path\\To\\file.conf 
    
  • 或来自Java代码:

    System.setProperty("java.security.auth.login.config","c:\\path\\To\\file.conf"); 
    

我也想知道一个更好的方式来指定配置。我想在我的WAR中打包该配置。

+0

嗯,这是一个选项。也许我们可以在WAR内的'.properties'文件的某处设置这个'java.security.auth.login.config'参数。在你的情况下,这个设置对于Tomcat中的所有应用程序都是全局的。 – yegor256 2011-03-04 07:00:58

+0

你有没有找到一种方法来引用放在WAR文件中的.conf文件? – yathirigan 2015-10-23 11:50:10

6

我有同样的问题,我想看看如果我不能根据当前的类路径(这将位于战争本身内)动态设置此属性。

public class SecurityListener implements ServletContextListener { 
    public SecurityListener() { 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent arg0) { 
    } 

    @Override 
    public void contextInitialized(ServletContextEvent arg0) { 
     if(System.getProperty("java.security.auth.login.config") == null) { 
      String jaasConfigFile = null; 
      URL jaasConfigURL = this.getClass().getClassLoader().getResource("login.conf"); 
      if(jaasConfigURL != null) { 
       jaasConfigFile = jaasConfigURL.getFile(); 
      } 
      System.setProperty("java.security.auth.login.config", jaasConfigFile); 
     } 
    } 
} 

显然,你需要将监听器添加到你的web.xml:

<listener> 
    <listener-class>example.SecurityListener</listener-class> 
</listener> 

这样做是java.security.auth.login.config时的实例化设置的属性Web应用程序,如果它尚未定义。这意味着你可以把它放到你的源文件夹中,如果没有其他地方重新定义,它会自动加载它。我测试了这个,它可以在Tomcat 6上运行。

因此,例如,如果您的Tomcat安装位于“C:\ program files \ tomcat6 \”中,并且您的战争部署在“C:\ program files \ tomcat6 \ webapps \ mywar“,它会找到的路径是”C:\ program files \ tomcat6 \ webapp \ mywar \ WEB-INF \ classes“,它总是准确的。不知道这个解决方案是否也适用于其他Web应用程序,但我会这么想,因为login.conf将会是类路径根的地方。

希望有帮助!

+0

看起来像一个甜蜜的解决方案 – sehe 2012-07-19 09:39:56

4

您可以封装罐中的client_jaas.conf,并使用代码指定配置动态

System.setProperty("java.security.auth.login.config", XXX.class.getClassLoader().getResource("client_jaas.conf").toString());