当前位置: 首页 > 知识库问答 >
问题:

在现有的Spring Boot Spring Security配置中添加spring-session&Redis

吴英武
2023-03-14
@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig {

    @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
    @Configuration
    protected static class ApplicationSecurity extends WebSecurityConfigurerAdapter {

        private static final int MAX_CONCURRENT_USER_SESSIONS = 1;

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                    //snipped
                    .sessionManagement()
                    .maximumSessions(MAX_CONCURRENT_USER_SESSIONS)
                    .maxSessionsPreventsLogin(true)
                    .sessionRegistry(sessionRegistry());
        }

        @Bean
        public SessionRegistry sessionRegistry() {
            SessionRegistry sessionRegistry = new SessionRegistryImpl();
            return sessionRegistry;
        }

        @Bean
        public static HttpSessionEventPublisher httpSessionEventPublisher() {
            return new HttpSessionEventPublisher();
        }
    }
}

spring-session+spring-boot-starter-redis似乎是一个很好的候选人。

spring-session文档中提到,我们所需要做的就是添加注释@enableRedisHttpSession并定义JedisConnectionFactory

这确实有效,添加注释会导致会话存储在Redis中,我可以使用Redis-CLI看到这一点。

这意味着当当前用户注销时,试图使用该用户名的另一个会话仍将无法登录,而刚刚注销的用户将无法重新登录。这是因为会话永远不会从注册表/存储库中删除???

任何关于如何让我的会话创建/销毁工作,同时使用redis作为存储的洞察力都将非常感谢。

共有1个答案

巢烨
2023-03-14

我们目前不支持Spring Security的并发控制和Spring会话。您可以在GitHub上找到一个现存的问题。

一般的想法是使用Spring Session的SessionRepository接口来实现Spring Security的SessionRepository接口。

如果你想提交一个公关,它将非常感谢!

 类似资料:
  • MinDoc是基于beego1.8版本开发,基本上beego支持的session储存方式MinDoc同样支持。 Beego 官方文档: https://beego.me/docs/mvc/controller/session.md 目前MinDoc支持 file、mysql、redis 、memcached等储存引擎,配置如下: 文件储存配置: #配置储存引擎为文件 sessionprovider

  • 我们对session做了3种实现,也就是session提供了3种存储介质, file, memcache, redis. 任你选择,可实现无缝切换。至于这三种方式的优劣势的话都是老生长谈了,这里就不说了,大家都懂的。需要提一下的是如果你想实现单点登陆的话那你可能只能选redis和memcache了。 下面是配置文档: filepath : app/configs/session.config.ph

  • hold 命令让你能在现有图中添加图,输入 hold on 当你输入另一个作图命令时,MATLAB不会替换现有图;而是把新数据图添加到现有图中,必要时会改变坐标轴的标尺。 例如,以下语句先作一个peaks 函数的轮廓图,并在同一个函数图象中添加伪彩色图。 [x,y,z] = peaks; contour(x,y,z,20,'k') hold on pcolor(x,y,z) shading in

  • 编辑1: 我目前从一个Main类调用它,如下所示: } 原文: 解释后代码如下: 我有一个带有JavaConfig的Spring应用程序,称之为主应用程序,它从库中导入另一个Spring JavaConfig类。这个导入的JavaConfig应该用一个方面包装在主应用程序中创建的任何数据源,这个方面有一个自动连接的LogDelegator。 只要主应用程序只包含一个数据源,一切都正常。但是,当我向

  • 我正在研究基于Spring SecurityJava配置。 我已经创建了自己的身份验证提供者(MyAuthenticationProvider),我想在ProviderManager中注册它(AuthenticationManager的单个实例)。 我发现ProviderManager有一个提供者列表,我可以向其中注册我的单个身份验证提供者。 以下是我的配置部分: 我发现有、和许多其他字段。 我的

  • 我想在IntelliJ中运行我的第一个程序,但我不能在添加配置部分截图中添加我的主类 确定按钮不起作用