【问题标题】:Spring Security concurrency control with Redis使用 Redis 进行 Spring Security 并发控制
【发布时间】:2019-01-23 07:01:12
【问题描述】:

我们有一个关于 Spring Framework 的项目。它包含具有此配置的 Spring Security:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        .antMatchers(LOGIN_URL + "/**").permitAll()
        .antMatchers("/resources/**").permitAll()
        .antMatchers("/**").access(<...>)
        .and()
            .formLogin()
               .loginPage(LOGIN_URL)
               .defaultSuccessUrl(LOGIN_URL + "/success", true)
               .failureUrl(LOGIN_URL + "/error")
            .usernameParameter("username").passwordParameter("password")
        .and()
            .logout().logoutSuccessUrl(LOGOUT_URL)
        .and()
            .csrf()
        .and()
            .securityContext().securityContextRepository(reloadUserAuthoritiesService)
        .and()
           .sessionManagement()
           .maximumSessions(1)
           .sessionRegistry(sessionRegistry)
           .expiredUrl(LOGIN_URL)
        ;
    }

它可以在一台 Apache Tomcat 服务器上运行。如果我尝试从其他浏览器登录,我之前的 http 会话将过期。

现在我们需要添加 Redis 服务器 (v 4.0.9) 作为 http 会话的存储,因为我们需要在多个实例之间共享会话。 但是我可以通过同一用户和不同的会话登录两个 Apache Tomcat。这不好。 我尝试了几种配置方式:

  1. https://www.baeldung.com/spring-session(注解配置)
  2. 只有没有项目更改的 tomcat 配置 (redis-session-manager-with-dependencies-2.2.2.jar)

所有这些方法都行不通。 我也发现了这个问题:https://github.com/spring-projects/spring-session/issues/65 它是在两年前实施的。 有人可以帮帮我吗?

【问题讨论】:

标签: java spring spring-security redis spring-session


【解决方案1】:

谢谢大家。我忘了创建 SpringSessionBackedSessionRegistry bean。 现在问题已经解决了。

【讨论】:

    猜你喜欢
    • 2012-01-25
    • 1970-01-01
    • 2018-10-12
    • 2017-04-05
    • 2021-04-18
    • 2011-07-28
    • 2016-07-02
    • 2013-11-25
    • 1970-01-01
    相关资源
    最近更新 更多