用戶認證通過后,為了避免用戶的每次操作都進行認證,可以將用戶的信息保存在會話中。會話就是系統為了保持當前用戶的登錄狀態所提供的機制,常見的有基于Session方式、基于Token方式等。Spring Security提供會話管理功能,只需要配置即可使用。同時,如果想結束當前會話,可以在自定義退出功能中銷毀會話中的用戶信息。
Session的創建策略
默認情況下,Spring Security會為每個登錄成功的用戶新建一個Session對象進行會話管理,開發者也可以根據具體的需求對Session的創建進行控制。Spring Security管理Session的創建策略有以下四種。
always:如果沒有Session就創建一個。
ifRequired:如果需要就創建一個Session,是默認的創建策略。
never:Spring Security將不會創建Session,但是如果項目中其他地方創建了Session,那么Spring Security可以使用它。
stateless:Spring Security將絕對不會創建Session,也不使用Session。
當項目中不想自動創建Session,但是想要使用項目中其他地方創建的Session時,可以選擇使用never策略。
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);return http.build();
}
設置Session的超時時間?
Spring Security對用戶信息認證通過后,會將用戶信息存入Spring Security應用的上下文對象 如果項目中允許創建Session,默認情況下Session的超時時間為30分鐘,如果想要對Session默認的超時時間進行修改,可以在Spring Boot的配置文件中設置Session的超時時間。
server:servlet:session:timeout: 86400s