不要为匿名用户启动会话

时间:2019-02-12 10:36:49

标签: spring-boot session

如何在Spring Boot 2.0中为匿名用户禁用会话?

我当前的配置:

public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/actuator/**").permitAll()
                .antMatchers("/password/forgot/**").permitAll()
                .antMatchers("/password/reset/**").permitAll()
                .antMatchers("/css/**").permitAll()
                .antMatchers("/js/**").permitAll()
                .antMatchers("/img/**").permitAll()
                .antMatchers("/manage/**").permitAll()
                .antMatchers( "/favicon.ico").permitAll()
                .anyRequest().authenticated();

        http
                .formLogin()
                .loginPage("/login")
                .permitAll()
                .successHandler(authSuccessHandler)
                .and()
                .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login")
                .invalidateHttpSession(true)
                .permitAll();
    }
}

当我打开登录页面时,仍然创建了一个会话:

enter image description here

3 个答案:

答案 0 :(得分:0)

也许会话是由Spring Security自动创建的。可以通过将create-session设置为never来禁用该行为。这意味着Spring Security将不会尝试自动创建会话。

<http create-session="never">
[...]
</http>

此处有更多详细信息:https://www.baeldung.com/spring-security-session

答案 1 :(得分:0)

尝试在FormLoginWebSecurityConfigurerAdapter类中的http之后添加“ anonymous.disable()”。

.skip

享受!

答案 2 :(得分:0)

就我而言,我必须做三件事:

  1. http.anonymous.disable()添加到我的WebSecurityConfigurerAdapter。
  2. 还添加http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER)。我不知道为什么,但是尽管文档说它永远不会为您创建会话,但这确实会为经过身份验证的用户创建会话。
  3. 在测试之前删除了我所有的cookie。我发现,如果您使用旧的会话cookie发出请求,则服务器将使用该cookie创建一个新会话,而完全忽略我们刚刚设置的SessionCreationPolicy