将安全配置文件放置在WAR中的位置?
我想在我的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);
不幸的是我能得到它的工作的唯一方法是创建一个文件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中打包该配置。
我有同样的问题,我想看看如果我不能根据当前的类路径(这将位于战争本身内)动态设置此属性。
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将会是类路径根的地方。
希望有帮助!
看起来像一个甜蜜的解决方案 – sehe 2012-07-19 09:39:56
您可以封装罐中的client_jaas.conf,并使用代码指定配置动态
System.setProperty("java.security.auth.login.config", XXX.class.getClassLoader().getResource("client_jaas.conf").toString());
嗯,这是一个选项。也许我们可以在WAR内的'.properties'文件的某处设置这个'java.security.auth.login.config'参数。在你的情况下,这个设置对于Tomcat中的所有应用程序都是全局的。 – yegor256 2011-03-04 07:00:58
你有没有找到一种方法来引用放在WAR文件中的.conf文件? – yathirigan 2015-10-23 11:50:10