在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
畫面如下
範例專案結構如下。
參考:
沒有留言:
張貼留言