我已为我的Web应用程序配置了JAAS登录。登录在web.xml
中配置,如下所示。
<security-constraint>
<web-resource-collection>
<web-resource-name>application</web-resource-name>
<url-pattern>/application/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>ROLE</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>ROLE</role-name>
</security-role>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/WEB-INF/login.xhtml</form-login-page>
<form-error-page>/WEB-INF/login.xhtml?failed=true</form-error-page>
</form-login-config>
</login-config>
对于ROLE
中的用户,一切都按预期工作。但是当我尝试使用不在必要ROLE
内的用户访问受限资源时,仍会执行登录,显示代码为403
的错误,并且用户无法执行注销(除了删除cookie或重新启动浏览器。)
当然我可以配置在web.xml
中使用不同的错误页面,允许注销。
<error-page>
<error-code>403</error-code>
<location>/WEB-INF/error.xhtml</location>
</error-page>
但我希望的行为是,未分配ROLE
的用户根本无法登录,并被重定向到具有相应错误消息的登录页面。我怎样才能做到这一点?
我不知道这些信息是否必要,但我使用的前端框架是JSF 2.1。