本文參考或摘錄自:http://haohaoxuexi.iteye.com/blog/2154714
在上一篇中使用Spring Security做了一些安全控制,如Spring Security 自動生成登陸頁面登陸以后便能正常使用系統。本文介紹Spring Security 自定義登陸頁面以及相關的一些處理。
Spring Security 之form-login。
1、使用form-login 自定義登陸頁
2、使用form-login做登陸引導處理,即登陸成功后定向到其他頁面
3、使用form-login 登陸失敗后處理
一、form-login 介紹:
form-login元素是用來定義表單登錄信息,以及登陸后續處理。配置如下:
<security:http> <!--http元素下的form-login元素用來定義表單登錄信息.login-page指定用戶指定的登錄頁--> <!-- username-parameter:表示登錄時用戶名使用的是哪個參數,默認是“j_username”。 password-parameter:表示登錄時密碼使用的是哪個參數,默認是“j_password”。 login-processing-url:表示登錄時提交的地址,默認是“/j-spring-security-check”。這個只是Spring Security用來標記登錄頁面使用的提交地址,真正關於登錄這個請求是不需要用戶自己處理的。--> <security:form-login login-page="/login.jsp" login-processing-url="/login.do" username-parameter="username" password-parameter="password" authentication-success-handler-ref="authSuccess" --用作登陸成功后的處理bean
/> <!-- IS_AUTHENTICATED_ANONYMOUSLY 表示匿名用戶可以訪問,與ROLE_ANONYMOUS效果相同 --> <security:intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/> <security:intercept-url pattern="/**" access="ROLE_USER"/> </security:http>
注:<security:http security="none" pattern="/login.jsp"></security:http> 為不進行安全認證的頁面。因此以上配置與以下等效:
<security:http security="none" pattern="/login.jsp"></security:http> <!--http元素用於定義Web相關權限控制。--> <!--intercept-url定義了一個權限控制的規則。 pattern屬性表示我們將對哪些url進行權限控制,其也可以是一個正則表達式,如上的寫法表示我們將對所有的URL進行權限控制; access屬性表示在請求對應的URL時需要什么權限,默認配置時它應該是一個以逗號分隔的角色列表,請求的用戶只需擁有其中的一個角色就能成功訪問對應的URL。 這里的“ROLE_USER”表示請求的用戶應當具有ROLE_USER角色。“ROLE_”前綴是一個提示Spring使用基於角色的檢查的標記。--> <!--注:auto-config="true"時,SpringSecurity發現沒有登錄回自動創建登陸頁面--> <security:http> <!--http元素下的form-login元素用來定義表單登錄信息.login-page指定用戶指定的登錄頁--> <!-- username-parameter:表示登錄時用戶名使用的是哪個參數,默認是“j_username”。 password-parameter:表示登錄時密碼使用的是哪個參數,默認是“j_password”。 login-processing-url:表示登錄時提交的地址,默認是“/j-spring-security-check”。這個只是Spring Security用來標記登錄頁面使用的提交地址,真正關於登錄這個請求是不需要用戶自己處理的。--> <security:form-login login-page="/login.jsp" login-processing-url="/login.do" username-parameter="username" password-parameter="password" authentication-success-handler-ref="authSuccess" --用作登陸成功后的處理bean /> <!-- IS_AUTHENTICATED_ANONYMOUSLY 表示匿名用戶可以訪問,與ROLE_ANONYMOUS效果相同 --> <!--<security:intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>--> <security:intercept-url pattern="/**" access="ROLE_USER"/> </security:http>
二、form-login做登陸引導處理 元素:authentication-success-handler-ref。具體配置見上配置,另外如還需使用Spring Security做登陸成功后的引導處理,還需配置如下bean.
<bean name="authSuccess" class="com.vrv.springMvcDemo.security.AuthenticationSuccessHandlerImpl"></bean>
authSuccess 的實現類代碼如下:
package com.vrv.springMvcDemo.security; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /* * * Created by Administrator on 2014/12/5. */ public class AuthenticationSuccessHandlerImpl implements AuthenticationSuccessHandler { @Override public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { response.sendRedirect("index.jsp"); } }
如果不需要Spring Security進行登陸成功引導處理,直接使用指定頁面則可使用default-target-url 進行配置。如下:
<security:form-login login-page="/login.jsp" login-processing-url="/login.do" username-parameter="username" password-parameter="password" default-target-url="/index.jsp" />
三、form-login 登陸失敗后處理。配置如下:
<security:http security="none" pattern="/loginFailure.jsp"></security:http> <security:form-login login-page="/login.jsp" login-processing-url="/login.do" username-parameter="username" password-parameter="password" default-target-url="/index.jsp" authentication-failure-url="/loginFailure.jsp" />
注意:此處loginFailure.jsp需配置為不需要進行安全認證,否則此頁面由於Spring Security 而不能訪問
同 AuthenticationSuccessHandler 進行登陸成功處理,登陸失敗除了可以指定authentication-failure-url之外,form-login同樣允許我們指定認證失敗后的頁面和對應認證失敗后的處理器AuthenticationFailureHandler。