我正在尝试在我的WAR中使用JAAS进行身份验证.据我所知,我的配置文件(其它链接)应该被放置的地方(如解释在这里).不幸的是,如果我们谈论WAR,我无法理解究竟在哪里?以及如何命名文件?
// JAAS has to find the file and retrieve "foo" from it
LoginContext ctx = new LoginContext("foo", this);
Run Code Online (Sandbox Code Playgroud)
我有同样的问题,我想看看我是否无法根据当前的类路径(它将位于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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,您需要将侦听器添加到web.xml:
<listener>
<listener-class>example.SecurityListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)
这样做是在实例化Web应用程序时设置属性java.security.auth.login.config(如果尚未定义).这意味着你可以把它扔到你的源文件夹中并自动加载它,如果没有在其他地方重新定义.我测试了这个,它适用于Tomcat 6.
因此,例如,如果您的tomcat安装在"C:\ program files\tomcat6 \"中并且您的war部署在"C:\ program files\tomcat6\webapps\mywar"中,那么它找到的路径将是"C:\"程序文件\ tomcat6\webapp\mywar\WEB-INF\classes"这总是准确的.不确定这个解决方案是否也适用于其他Web应用程序,但我想是这样,因为login.conf将成为类路径根目录.
希望有所帮助!
您可以将client_jaas.conf封装在jar中,并使用代码动态地指定配置
System.setProperty("java.security.auth.login.config", XXX.class.getClassLoader().getResource("client_jaas.conf").toString());
Run Code Online (Sandbox Code Playgroud)
不幸的是,我能够让它工作的唯一方法是创建一个文件jass.conf并使用以下任一方法指定它:
Tomcat中java参数:
-Djava.security.auth.login.config==c:\\path\\To\\file.conf
Run Code Online (Sandbox Code Playgroud)或者从 Java 代码中:
System.setProperty("java.security.auth.login.config","c:\\path\\To\\file.conf");
Run Code Online (Sandbox Code Playgroud)我还想知道指定配置的更好方法。我想将该配置打包到我的 WAR 中。