在WAR中放置安全配置文件的位置?

时间:2010-12-12 15:38:23

标签: java jaas

我正在尝试在WAR中使用JAAS进行身份验证。我了解我的configuration fileanother link)应放在某处(如here所述)。不幸的是,如果我们谈论WAR,我无法理解究竟在哪里?以及如何命名文件?

// JAAS has to find the file and retrieve "foo" from it
LoginContext ctx = new LoginContext("foo", this);

3 个答案:

答案 0 :(得分:6)

我有同样的问题,我想看看我是否无法根据当前的类路径(它将位于war本身内)动态设置此属性。

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>

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

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

希望有所帮助!

答案 1 :(得分:5)

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

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

答案 2 :(得分: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中打包该配置。