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

如何在Spring Boot 3中用Customizer配置sessionFixation.none?

解决方案

在Spring Boot 3.x(对应Spring Security 6.x)的lambda风格配置中,sessionFixation是sessionManagement的子配置项,无需单独拆分配置。你只需要在现有的sessionManagement lambda块中添加sessionFixation的配置即可:

.sessionManagement(request ->
    request
        .invalidSessionUrl("/invalidSession.html")
        .maximumSessions(1)
        .sessionRegistry(sessionRegistry())
        .sessionFixation(sessionFixation -> sessionFixation.none()) // 这里添加sessionFixation配置
)

修改后的完整配置代码

@Bean
public SecurityFilterChain filterChain(final HttpSecurity http) throws Exception {
    return http
            .csrf(request -> request.disable())
            .authorizeHttpRequests(request ->
                request
                    .requestMatchers(PUBLIC_PATHS).permitAll()
                    .requestMatchers("/invalidSession*").anonymous()
                    .requestMatchers("/user/updatePassword*").hasAuthority("CHANGE_PASSWORD_PRIVILEGE")
                    .anyRequest().hasAuthority("READ_PRIVILEGE")
            )
            .formLogin(request ->
                request
                    .loginPage("/login")
                    .defaultSuccessUrl("/homepage.html")
                    .failureUrl("/login?error=true")
                    .successHandler(myAuthenticationSuccessHandler)
                    .failureHandler(authenticationFailureHandler)
                    .authenticationDetailsSource(authenticationDetailsSource)
                    .permitAll()
            )
            .sessionManagement(request ->
                request
                    .invalidSessionUrl("/invalidSession.html")
                    .maximumSessions(1)
                    .sessionRegistry(sessionRegistry())
                    .sessionFixation(sessionFixation -> sessionFixation.none()) // 配置sessionFixation.none()
            )
            .logout(request ->
                request
                    .logoutSuccessHandler(myLogoutSuccessHandler)
                    .invalidateHttpSession(true)
                    .logoutSuccessUrl("/logout.html?logSucc=true")
                    .deleteCookies("JSESSIONID")
                    .permitAll()
            )
            .rememberMe(request ->
                request
                    .rememberMeServices(rememberMeServices())
                    .key("theKey")
            )
            .build();
}

说明

旧版链式配置中,sessionManagement()和sessionFixation()是通过.and()连接的独立配置节点,但Spring Security 6引入的lambda风格配置里,sessionFixation被整合到sessionManagement的配置体系内,作为其子配置项存在,这种结构更符合模块化配置逻辑,也让整个配置链条更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:25:46