我正在尝试让JAAS为Tomcat 7中的Web应用程序工作。我正在使用基于表单的身份验证,自定义LoginModule和tomcat JAASRealm,我得到了一切工作,但似乎我的LoginModule永远不会被调用。 我在c:\ tomcat_home \ 7.0上安装了我的tomcat,并且我在启动配置中使用以下JVM参数在eclipse中运行项目:
-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 args和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>
的jaas.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>