随笔 - 441  文章 - 4  评论 - 84  阅读 - 109万 

我们知道springsecutity 是通过一系列的 过滤器实现的,我们可以看看这系列的过滤器到底长成什么样子呢?

一堆过滤器,这个过滤器的设计设计上是 责任链设计模式。

这里我们可以看到有一个 AnonymousAuthenticationFilter 过滤器。

顾名思义我们知道这个是一个叫 匿名登录人过滤器,他的作用是什么呢?

我们看看代码 ,他做了什么?

复制代码
if (applyAnonymousForThisRequest((HttpServletRequest) req)) {
            if (SecurityContextHolder.getContext().getAuthentication() == null) {
                SecurityContextHolder.getContext().setAuthentication(createAuthentication((HttpServletRequest) req));

                if (logger.isDebugEnabled()) {
                    logger.debug("Populated SecurityContextHolder with anonymous token: '"
                        + SecurityContextHolder.getContext().getAuthentication() + "'");
                }
            } else {
                if (logger.isDebugEnabled()) {
                    logger.debug("SecurityContextHolder not populated with anonymous token, as it already contained: '"
                        + SecurityContextHolder.getContext().getAuthentication() + "'");
                }
            }
        }
复制代码

很简单,当他发现没有登录的时候,手工设置了一个匿名的登录人Authentication。

我们可以在其后的过滤器中,如果没有登录时,我们可以知道当前访问的是匿名用户。

我们可以通过如下代码获取当前人是匿名用户。

Authentication auth= SecurityContextHolder.getContext().getAuthentication();
if (auth==null || "anonymousUser".equals(auth.getPrincipal().toString())) {

 

posted on   自由港  阅读(662)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示