用户认证通过后,为了避免用户的每次操作都进行认证,可以将用户的信息保存在会话中。会话就是系统为了保持当前用户的登录状态所提供的机制,常见的有基于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