JAAS Realm加载内部配置文件

时间:2014-10-17 14:23:28

标签: java tomcat jaas

我在Tomcat 7上实现了一个带有域配置的简单JAAS模块。在catalina.sh中指定jaas.conf文件时它可以正常工作

JAVA_OPTS=$JAVA_OPTS "-Djava.security.auth.login.config==$CATALINA_BASE/conf/jaas.config"

但是,我想通过在Web应用程序内部添加此配置文件来简化我的应用程序。文档说明您可以使用configFile参数

“与此Realm一起使用的JAAS配置文件的名称。将使用ClassLoader#getResource(String)搜索它,以便可以将配置捆绑在Web应用程序中。如果未指定,则默认将使用JVM全局JAAS配置。“

我的网络应用中的我的context.xml:

<Realm appName="AppLogin" className="org.apache.catalina.realm.JAASRealm" configFile="WEB-INF/jaas.config" ...../>

配置文件位于/WEB-INF/jaas.config

为什么我的jaas配置文件没有加载?

http://tomcat.apache.org/tomcat-7.0-doc/config/realm.html#JAAS_Realm_-_org.apache.catalina.realm.JAASRealm

2 个答案:

答案 0 :(得分:3)

  

将使用ClassLoader#getResource(String)

进行搜索

然后,您需要将JAAS配置文件直接放在类路径中:WEB-INF/classesWEB-INF/lib,而不是WEB-INF

并仅指定文档中的文件名:

  

configFile - 要与此配合使用的JAAS配置文件的名称   领域

答案 1 :(得分:0)

似乎在Tomcat 7中没有实现configFile属性,即使文档声明它是。我检查了org.apache.catalina.realm.JAASRealm的源代码,没有setConfigFile的方法。

当您使用未实现关联方法的属性时,Tomcat会报告如下消息:

  

警告:[SetPropertiesRule] {Context / Realm}设置属性   'configFile'到'jaas.config'找不到匹配的属性。

该消息表明无法识别 configFile 属性,因此JAASRealm将不知道在哪里查找jaas.config。

因此,对于Tomcat 7,您只能使用-Djava.security.auth.login.config = $ CATALINA_BASE / conf / jaas.config指定jaas.config

Tomcat 8 source在org.apache.catalina.realm.JAASRealm中有setConfigFile的方法。我没有尝试过Tomcat 8。