You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Session Hazelcast跨Tomcat多JVM并发控制启动异常咨询

依赖冲突修正

你当前引入了两个不同版本的Hazelcast依赖,会导致类加载冲突:

  • 移除 com.hazelcast.hazelcast-all 4.2.2 依赖,统一Hazelcast版本和Spring Session 2.6.0兼容即可,可保留 com.hazelcast.hazelcast 5.0 或者降级到4.2.2,不要同时存在两个版本的Hazelcast核心包。

启动报错原因

你手动实例化SpringSessionBackedSessionRegistry时,该类依赖Spring容器注入的SessionRepository和BeanFactory,手动new的实例没有经过Spring的依赖注入流程,就会抛出java.lang.IllegalStateException: BeanFactory has not been injected into @Configuration class异常。

解决方案

1. 注册Spring托管的SessionRegistry Bean

不需要手动替换默认实现,只需要在配置类中声明SessionRegistry类型的Bean,Spring会自动优先使用该Bean覆盖默认的SessionRegistryImpl:

@Configuration
@EnableHazelcastHttpSession // 开启Spring Session Hazelcast自动配置
public class HazelcastSessionConfig {

    // 你已实现的Hazelcast实例Bean,确保多节点集群配置正确
    @Bean
    public HazelcastInstance hazelcastInstance() {
        Config config = new Config();
        // 自定义集群名称、网络发现、会话存储Map配置等逻辑
        return Hazelcast.newHazelcastInstance(config);
    }

    // 声明跨节点支持的SessionRegistry Bean
    @Bean
    public SessionRegistry sessionRegistry(FindByIndexNameSessionRepository<?> sessionRepository) {
        return new SpringSessionBackedSessionRegistry<>(sessionRepository);
    }
}

2. Security配置中直接注入使用

在Spring Security配置类中直接注入上面声明的SessionRegistry即可,不要手动实例化:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private SessionRegistry sessionRegistry;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            // 其他安全规则配置
            .sessionManagement()
                .maximumSessions(1) // 按你的业务需求配置单用户最大会话数
                .sessionRegistry(sessionRegistry) // 直接使用注入的实例
                .maxSessionsPreventsLogin(true); // 超过会话数时阻止新登录,可选配置
    }
}

常见问题说明

spring-session-hazelcast没有提供单独的注解自动替换SessionRegistry,只要你声明了自定义的SessionRegistry类型Bean,Spring Security的自动配置会自动使用该Bean替换默认实现,不需要额外配置。

配置完成后可通过断点调试或者ApplicationContext获取SessionRegistry实例,确认类型为SpringSessionBackedSessionRegistry即为配置生效。

内容的提问来源于stack exchange,提问作者ruz4life

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:06:10