Spring Security 註銷

Spring Security
Remote
1
07:15 PM · Nov 29 ,2025

1. 概述

本文檔基於我們的表單登錄教程,將重點介紹如何配置 使用 Spring Security 註銷

2. 基本配置

使用 Spring Logout 功能

@Configuration
@EnableWebSecurity
public class SecSecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
          //...
          .logout()
          //...
   }
   //...
}

並且使用 XML 配置:

<http>

    ...
    <logout/>

</http>

該元素啓用默認的登出機制——它配置為使用以下 登出 URL/logout,之前是 /j_spring_security_logout,在 Spring Security 4

3. JSP 和註銷鏈接

繼續這個簡單的示例,在 Web 應用程序中提供 註銷鏈接 的方法是:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
   <head></head>
   <body>
      <a href="<c:url value="/logout" />">註銷</a>
   </body>
</html>

4. 進階自定義

4.1. logoutSuccessUrl()退出過程成功後,Spring Security 會將用户重定向到指定的頁面。 默認情況下,這是根頁面 (“/”),但可以配置:

//...
.logout()
.logoutSuccessUrl("/afterlogout.html")
//...

這也可以使用 XML 配置:

<logout logout-success-url="/afterlogout.html" />

根據應用程序,為了讓用户返回登錄頁面,建議這樣做:

//...
.logout()
.logoutSuccessUrl("/login.html")
//...

4.2. logoutUrl()

與 Spring Security 中的其他默認值類似,觸發退出機制的 URL 也有默認值 – /logout

但是,為了確保沒有關於使用的框架的信息被髮布,建議更改此默認值:

.logout()
.logoutUrl("/perform_logout")

以及通過 XML:

<logout 
  logout-success-url="/anonymous.html" 
  logout-url="/perform_logout" />

4.3. invalidateHttpSessiondeleteCookies

這兩個高級屬性控制會話失效以及在用户退出時要刪除的 Cookie 列表。 因此,invalidateHttpSession 允許設置會話,使其在退出時不會失效 (默認情況下為 true)。

deleteCookies 方法也很簡單:

.logout()
.logoutUrl("/perform_logout")
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID")

以及 XML 版本:

<logout 
  logout-success-url="/anonymous.html" 
  logout-url="/perform_logout"
  delete-cookies="JSESSIONID" />

4.4. logoutSuccessHandler()

在命名空間不夠靈活的情況下,可以使用 Spring Context 中的 LogoutSuccessHandler Bean,而不是自定義引用:

@Bean
public LogoutSuccessHandler logoutSuccessHandler() {
    return new CustomLogoutSuccessHandler();
}

//...
.logout()
.logoutSuccessHandler(logoutSuccessHandler());
//...

XML 配置等效於:

<logout 
  logout-url="/perform_logout"
  delete-cookies="JSESSIONID"
  success-handler-ref="customLogoutSuccessHandler" />

...
<beans:bean name="customUrlLogoutSuccessHandler" />

可以實現任何需要運行的自定義應用程序邏輯,當用户成功退出時,例如 – 一個簡單的審計機制,跟蹤用户觸發退出時最後訪問的頁面:

public class CustomLogoutSuccessHandler extends 
  SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler {

    @Autowired 
    private AuditService auditService; 

    @Override
    public void onLogoutSuccess(
      HttpServletRequest request, 
      HttpServletResponse response, 
      Authentication authentication) 
      throws IOException, ServletException {
 
        String refererUrl = request.getHeader("Referer");
        auditService.track("Logout from: " + refererUrl);

        super.onLogoutSuccess(request, response, authentication);
    }
}

請注意,此自定義 Bean 負責確定用户退出後要定向到的目標頁面。 因此,將 logoutSuccessHandler 屬性與 logoutSuccessUrl 結合使用將不會起作用,因為兩者都涵蓋了類似的功能。

5. 結論

在本示例中,我們首先設置了一個簡單的註銷示例,使用了 Spring Security,然後討論了更多高級選項。

當項目在本地運行時,該示例 HTML 可在以下位置訪問:

http://localhost:8080/spring-security-mvc-login/login.html

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.