我正在尝试让 JAAS 为 Tomcat 7 中的 Web 应用程序工作。我正在使用基于表单的身份验证、自定义 LoginModule 和 tomcat JAASRealm,除了我的 LoginModule 似乎永远不会被调用之外,我一切正常。我已经在 c:\tomcat_home\7.0 上安装了我的 tomcat,并且我正在 eclipse 中运行该项目,并在启动配置中使用以下 JVM 参数:
-Dcatalina.base="C:\Users\user\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1"
-Dcatalina.home="C:\tomcat_home\7.0"
-Dwtp.deploy="C:\Users\user\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps"
-Djava.endorsed.dirs="C:\tomcat_home\7.0\endorsed"
-Djava.security.auth.login.config="C:\tomcat_home\7.0\conf\jaas.config"
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file="C:\tomcat_home\7.0\conf\logging.properties"
它具有默认的 eclipse JVM 参数以及 java.util.logging 标志和 JAAS 配置文件的 java.security.auth.login.config 标志。
现在,每次我访问安全 url JAAS 时,我都会按预期重定向到登录页面,但是当我提交用户和密码时,我会得到登录失败页面,即使我的 LoginModule 没有进行任何检查 - 我已经设置了它始终进行身份验证。我还用 System.out 调用和调试断点填充了 LoginModule,但是,即使我在调试模式下运行 tomcat,我在控制台中也没有输出,并且执行永远不会在断点处停止。除此之外,我清除了配置文件 - jaas.config - 希望我会得到一个异常,但 Tomcat 正常启动并观察到相同的身份验证行为。
问题是:如何确保我的 LoginModule 和 jaas 配置被拾取?Tomcat 7 JAASRealm 是否有默认的 LoginModule 实现?
任何帮助表示赞赏。
web.xml
<security-constraint>
<web-resource-collection>
<web-resource-name>app</web-resource-name>
<url-pattern>/pages/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>auth</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>auth</role-name>
</security-role>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsf</form-login-page>
<form-error-page>/loginFail.jsf</form-error-page>
</form-login-config>
</login-config>
配置文件
secureApp {
com.mycompany.security.jaas.JPALoginModule required;
};
META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Realm className="org.apache.catalina.realm.JAASRealm" appName="secureApp"
userClassNames="com.mycompany.security.jaas.UserPrincipal" roleClassNames="com.mycompany.security.jaas.RolePrincipal" />
</Context>