java - 在 spring security + spring boot 中禁用同一用户的多个登录

标签 java spring spring-boot authentication spring-security

我有以下 Spring 配置:-

static SessionRegistry SR;
@Override
protected void configure(HttpSecurity http) throws Exception {
    http
    .authorizeRequests()
    .antMatchers("/", "/forgotPwd", "/resetPwd").permitAll()
    .anyRequest().authenticated().and().formLogin().loginPage("/login")
    .defaultSuccessUrl("/home").failureUrl("/login?error").permitAll()
    .successHandler(authenticationSuccessHandler) // autowired or defined below
    .and().logout()
    .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
    .logoutSuccessHandler(myLogoutSuccessHandler)
    .permitAll()
    .and().sessionManagement()
    .maximumSessions(1)
    .maxSessionsPreventsLogin(true)
    .sessionRegistry(SR);
    }
    @Bean
    public ServletListenerRegistrationBean<HttpSessionEventPublisher> httpSessionEventPublisher() {
    return new ServletListenerRegistrationBean<HttpSessionEventPublisher>(new HttpSessionEventPublisher());
  }

我期待 sessionManagement().maximumSessions(1) 禁用同一用户的多次登录。它正在工作,但首先用户注销应用程序,所以我尝试在另一个浏览器中登录,但它显示This account is already used by someone

请您告诉我哪里出了问题。

最佳答案

删除您的httpSessionEventPublisherSessionRegistry

试试这个配置:

@Override
protected void configure(HttpSecurity http) throws Exception {
  http.authorizeRequests()
    .antMatchers("/", "/forgotPwd", "/resetPwd").permitAll()
    .anyRequest().authenticated()
    .and()
      .formLogin().loginPage("/login").defaultSuccessUrl("/home").failureUrl("/login?error").permitAll()
    .and()
      .sessionManagement()
      .maximumSessions(1);
}

您可以在application.properties

中设置 session 超时
server.session.timeout= # Session timeout in seconds.

关于java - 在 spring security + spring boot 中禁用同一用户的多个登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44155608/

相关文章:

java - 如何使用 spring boot 压缩下载的文件

java - Spring Webjars 定位器和上下文路径

java - 在 Spring-Boot 中配置 bean

java - MediaRecorder 在 android 上开始视频捕捉的问题

spring - 在运行时显式获取 bean 的实例

java - 使用 Thymeleaf 如何通过数组列表显示迭代?

spring - 嵌套异常是 org.springframework.dao.InvalidDataAccessResourceUsageException - 无法执行查询(Spring 和 Hibernate)

java - 如何在 Spring Boot 中手动引导测试(不使用 @SpringBootTest-Annotation)

java - 我在使用 sleep 时遇到问题?

java - 我不知道如何在同一个程序中执行多个查询