SecurityContextHolder.getContext().getAuthentication()显示anonymousUser匿名用户问题
项目场景:在使用Spring security做用户认证从SecurityContextHolder中获取用户信息时,遇见如下问题:
分析原因:获取不到登录时储存的用户信息,猜测可能是在执行完某些操作之后将用户信息替换或者直接清空了。查看SecurityContextHolder的api发现里面有个clearContext()方法,通过debug模式发现当执行完org.springframework.security.web.context.SecurityContextPersistenceFilter和org.springframework.security.web.FilterChainProxy过滤器时会调用SecurityContextHolder.clearContext()方法把SecurityContextHolder清空,所以获取不到存储的用户信息。
解决方案:找到了问题所在就好解决了,可以自定义过滤器重新保存用户认证信息,如代码中自定义的MyAuthenticationTokenGenericFilter
改进之后的结果如下:
需要注意的是,如果需要用到权限认证,还需保存用户的权限信息,我这里暂时不用,所以没保留,只需要替换成这个构造函数就可以new UsernamePasswordAuthenticationToken(Object principal, Object credentials, Collection<? extends GrantedAuthority> authorities)
千万不要试图去研究 研究了很久都整不明白的东西,或许是层次不到,境界未到,也或许是从未在实际的应用场景接触过,这种情况下去研究,只会事倍功半,徒劳一番罢了。能做的就是不断的沉淀知识,保持一颗积极向上的学习心态,相信终有一天所有的困难都会迎刃而解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App