Springboot +spring security,实现session并发控制及实现原理分析

一.简介

在SpringSecurity中实现会话并发控制,只需要配置一个会话数量就可以了,先介绍下如何配置会话并发控制,然后再。介绍下SpringSecurity 如何实现会话并发控制。

二.创建项目

如何创建一个SpringSecurity项目,前面文章已经有说明了,这里就不重复写了。

三.代码实现

3.1设置只有一个会话

SecurityConfig 类,代码如下:

@Configuration
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .permitAll()
                .and()
                .sessionManagement()
                .maximumSessions(1);
        return http.build();
    }
}

登陆一个客户端

Springboot +spring security,实现session并发控制及实现原理分析_第1张图片
登陆第二个客户端
Springboot +spring security,实现session并发控制及实现原理分析_第2张图片
刷新第一个客户端
Springboot +spring security,实现session并发控制及实现原理分析_第3张图片
这时候发现已经被挤掉了。

目前默认策略是:后来的会把前面的给挤掉,现在我们通过配置,禁止第二个客户端登陆

3.2禁止第二个客户端登陆

SecurityConfig 类,代码如下:

@Configuration
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .permitAll()
                .and()
                .sessionManagement()
                .maximumSessions(1)
                .maxSessionsPreventsLogin(true);
        return http.build();
    }
}

登陆第一个客户端
Springboot +spring security,实现session并发控制及实现原理分析_第4张图片
登陆第二个客户端
Springboot +spring security,实现session并发控制及实现原理分析_第5张图片

四.实现原理分析

session默认的过滤器是SessionManagementConfigurer

你可能感兴趣的:(SpringBoot,spring,security,Java开发,spring,spring,boot,java)