我正在尝试在我的 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(使用前将#替换为@)