最近使用Tomcat的FORM安全认证发现了一些配置的问题,现在总结一下,WEB.XML配置例子如下:
<login-config>
<auth-method> FORM</ auth-method>
<form-login-config>
<form-login-page>/jsp/login.jsp</form-login-page>
<form-error-page>/jsp/error.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>RoleName</role-name>
</security-role>
<security-constraint>
<display-name>RoleName</display-name>
<web-resource-collection>
<web-resource-name> Protected Area</web-resource-name>
<url-pattern>/jsp/*</ url-pattern>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.do</ url-pattern>
<http-method>GET</ http-method>
<http-method>POST</ http-method>
</web-resource-collection>
<auth-constraint>
<role-name> RoleName</ role-name >
</auth-constraint>
</security-constraint>
一、FORM安全认证需要注意:
1、若不设置<http-method>则所有的http都会受到限制。
2、若设置了<http-method>则只有被设置的HTTP方法受到限制,其他方法不受限制。
3、设置了<url-pattern>的URL,需要经过验证才能登录,没有设置的则可以随便进行访问。
4、没有设置<auth-constraint>,或设置为<auth-constraint>*</auth-constraint>表示任何的角色都可以访问,<auth-constraint/>则表示没有角色可以访问
二、Tomcat安全认证的登录跳转:
1、输入url,进入登录页面:/jsp/login.jsp
2、当登录成功时跳转到/WebRoot目录下的
index.jsp页面,可以使用:
<script>
window.location.href='<%=path%>/jsp/target.jsp'
</script>
跳转到目标页面。
3、
登录页面由<form-login-page>设置,登录失败跳转页面使用<form-error-page>设置。
4、当试图在session没有注销时,再次在登录页面/jsp/login.jsp进行二次登录时,浏览器会报:404 /j_security_check
HTTP Status 404 - /XXX/j_security_check
发生这种情况是因为我们在重新登录 用户时,没有注销session。所以若不想出现404,我们只需对 /j_security_check请求,在后台做注销seesion操作即可,以下是我的退出操作,在退出添加javascript的onclick方法:function outLogin(){
$.get('j_security_check');//对j_security_check进行ajax请求,后台注销session
window.location.href='./';//跳转到被过滤页面,这里会自动跳转到登录页面
}
后台的注销session只需使用:
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
log.warn("注销session");
req.getSession().invalidate();
}