1. 程式人生 > >spring security起步四:退出登入配置以及logout屬性詳解

spring security起步四:退出登入配置以及logout屬性詳解

使用者退出登入實質是使當前登入使用者的session失效的操作。一般來說,使用者退出後,將會被重定向到站點的非安全保護頁,比如登入頁面.

使用者退出功能實現

增加hader.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <c:url value="/logout" var="logoutUrl"/> <a href="${logoutUrl }">退出系統</a> </body> </html>

引入至index.jsp

<body>
    <%@include file="header.jsp"
%> ... ... ...

配置spring security logout 屬性

spring-security.xml

...
...
<http auto-config="true" use-expressions="true">
    <intercept-url pattern="/*" access="hasRole('ROLE_USER')" />
    <form-login login-page="/loginPage" login-processing-url="/login"
        always-use-default-target="true"
default-target-url="/welcome" authentication-failure-url="/loginPage?error=error" /> <logout logout-url="/logout" logout-success-url="/loginPage" invalidate-session="true"/> <csrf disabled="true" /> </http> ... ...

現在我們啟動專案,登入成功後可以看到如下頁面
這裡寫圖片描述
點選退出登入,會返回到登入頁面。

logout 屬性詳解

  1. logout-url LogoutFilter要讀取的url,也就是指定spring security攔截的登出url
  2. logout-success-url 使用者退出後要被重定向的url
  3. invalidate-session 預設為true,使用者在退出後Http session失效
  4. success-handler-ref 對一個LogoutSuccessHandler的引用,用來自定義退出成功後的操作

這裡需要注意的一點是,spring security 3.x預設的登出攔截url為/j_spring_security_logout,而4.x則預設使用/logout

spring security退出功能相關類

spring security實現登出功能涉及的三個核心類為LogoutFilter,LogoutHandler,LogoutSuccessHandler

LoginFilter是實現登出功能的過濾器,預設攔截/logout或者logout屬性logout-url指定的url

LogoutHandler介面定義了退出登入操作的方法

void logout(HttpServletRequest request, HttpServletResponse response,
            Authentication authentication);

LogoutSuccessHandler介面定義了登出之後的操作方法

void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response,
            Authentication authentication) throws IOException, ServletException;

它們之間的類結構圖:
這裡寫圖片描述

spring security退出功能實現流程

spring security在實現登出功能時,大致流程如下
1. 使得HTTP session失效(如果invalidate-session屬性被設定為true);
2. 清除SecurityContex(真正使得使用者退出)
3. 將頁面重定向至logout-success-url指明的URL。