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

如何阻止匿名用户会话向Redis写入数据

阻止Spring Session Redis为匿名用户创建会话条目

我完全理解你的困扰——每次有匿名用户(比如爬虫)访问受保护的/secured端点时,哪怕被正确重定向到登录页,Redis里还是会生成一堆不必要的会话条目,长期下来肯定会浪费资源。咱们来解决这个问题。

问题根源

默认情况下,Spring Security在处理未认证请求时,会先创建一个匿名会话,再执行重定向逻辑。而Spring Session会把这个匿名会话同步到Redis里,这就是那些冗余条目的来源。

解决方案

只需要在你的Spring Security配置中添加一行代码,阻止Spring Security为匿名用户创建会话:

修改AppConfiguration类中的configure(HttpSecurity http)方法,加入.anonymous().createSession(false)配置:

@Configuration
@EnableWebSecurity
@EnableRedisHttpSession(redisNamespace = "demo-redis-data-session")
public static class AppConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("user").password("0000").roles("USER");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.formLogin().and()
                .authorizeRequests().antMatchers("/ping").permitAll()
                .anyRequest().fullyAuthenticated()
                .and()
                // 关键配置:禁止为匿名用户创建会话
                .anonymous().createSession(false);
    }
}

原理说明

anonymous().createSession(false)告诉Spring Security:不要为匿名用户创建任何会话。这样当匿名用户访问受保护资源时,系统会直接触发重定向到登录页的逻辑,不会生成任何会话对象,自然Spring Session也就不会往Redis里写入那些冗余条目了。

验证效果

  • 匿名访问/secured:会被302重定向到登录页,此时查看Redis的keys *,不会新增任何会话相关条目。
  • 登录后访问/secured:系统会正常创建会话并同步到Redis,完全不影响已登录用户的会话管理。
  • 退出登录:会话会被正确销毁,Redis里的对应条目也会被清理。

这个配置完全适配你使用的Spring Boot 1.5.9.RELEASE版本,不需要额外引入依赖,直接修改现有代码即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:43:45