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

2024-03-29

我正在尝试在我的 WAR 中使用 JAAS 进行身份验证。我明白我的配置文件 http://download.oracle.com/javase/6/docs/api/javax/security/auth/login/Configuration.html (另一个链接 http://download.oracle.com/javase/6/docs/jre/api/security/jaas/spec/com/sun/security/auth/login/ConfigFile.html)应该放在某个地方(如所解释的here http://download.oracle.com/javase/6/docs/technotes/guides/security/jaas/tutorials/GeneralAcnOnly.html#ConfigFile)。不幸的是,如果我们谈论战争,我不明白到底在哪里?以及如何命名该文件?

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

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

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\”中,而 war 部署在“C:\program files\tomcat6\webapps\mywar”中,则它将找到的路径为“C:\ program files\tomcat6\webapp\mywar\WEB-INF\classes” 始终准确。不确定这个解决方案是否也适用于其他 Web 应用程序,但我想是这样,因为 login.conf 将位于类路径根所在的位置。

希望有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WAR 中的安全配置文件放在哪里? 的相关文章

随机推荐