Tomcat的Form安全認證

最近使用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();
	}





發佈了42 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章