如何在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
相关产品推荐
相关产品推荐

