網頁

2019/11/23

Spring Boot Security 自訂登出重新導向路徑 custom logout success redirect url

在Spring Boot的Spring Security自訂登出後重新導向(redirect)的url路徑方法如下。


請先參考Spring Boot + Spring Security 基本配置設定教學進行Spring Security的設定。


Spring Security預設登出後重新導向的路徑為/login?logout,如果要改成自訂的url路徑,則在Spring Security配置類使用LogoutConfigurer.logoutSuccessUrl()來自訂登出後要導向的路徑位置。


例如我在Spring Boot Maven專案的src/main/resources/static下新增一個靜態的登出訊息頁面goodbye.html內容如下。

goodbye.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Good Bye</title>
</head>
<body>
    <h1>Good Bye. 再見</h1>
</body>
</html>

如果希望使用者登出後自動被導向goodbye.html頁面,則在此專案的Spring Security配置檔DemoWebSecurityConfig把登出後重新導向的url路徑設為/goodbye.html

注意由於原本的Spring Security設定是保護應用程式根目錄下的所有的資源,也包括/goodbye.html,所以必須把/goodbye.html設為任何人不用驗證即可直接存取。否則登出後身分被清除,重新導向/goodbye.html會因為未通過驗證又被導向至/login

DemoWebSecurityConfig

package com.abc.demo.config.security;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableWebSecurity
public class DemoWebSecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Autowired
    private DemoLogoutHandler demoLogoutHandler;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .authorizeRequests()
        .antMatchers("/goodbye.html").permitAll() // 存取"/goodbye.html"無須驗證
        .anyRequest()
        .authenticated()
        .and().formLogin()
        .and().httpBasic()
        .and().logout()
              .addLogoutHandler(demoLogoutHandler)
              .logoutSuccessUrl("/goodbye.html"); // 設定登出後的重新導向路徑
    }

}

完成以上配置後,啟動專案在瀏覽器輸入http://localhost:8080/demo進入登入畫面,
使用Spring Security預設的帳號密碼登入。

登出後Spring Security預設會導向/goodbye.html畫面如下



範例專案結構如下。




參考:

沒有留言:

張貼留言