Tomcat的Form安全认证

来源:互联网 发布:会议室预定系统 源码 编辑:程序博客网 时间:2024/04/28 02:15

最近使用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请求,后台注销sessionwindow.location.href='./';//跳转到被过滤页面,这里会自动跳转到登录页面}
后台的注销session只需使用:
protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {log.warn("注销session");req.getSession().invalidate();}





0 0
原创粉丝点击