【问题标题】:Where to place security configuration file in WAR?WAR中的安全配置文件放在哪里?
【发布时间】:2016-10-14 15:44:52
【问题描述】:

我正在尝试在我的 WAR 中使用 JAAS 进行身份验证。我知道我的configuration file (another link) 应该放在某个地方(如here 解释的那样)。不幸的是,如果我们在谈论 WAR,我无法理解确切的位置?以及如何命名文件?

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

【问题讨论】:

    标签: java jaas


    【解决方案1】:

    我遇到了同样的问题,我想看看我是否不能根据当前的类路径(它将位于战争本身)动态设置此属性。

    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 将成为类路径根目录的位置。

    希望有帮助!

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        不幸的是,我能够让它工作的唯一方法是创建一个文件 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 中。

        【讨论】:

        • 嗯,这是一个选择。也许我们可以在 WAR 中的 .properties 文件中的某个位置设置这个 java.security.auth.login.config 参数?在您的情况下,此设置对于 Tomcat 中的所有应用程序都是全局的。
        • 您是否找到了一种方法来引用放置在您的 WAR 文件中的 .conf 文件?
        猜你喜欢
        • 1970-01-01
        • 2019-07-01
        • 2017-11-19
        • 1970-01-01
        • 2016-11-28
        • 2011-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多