`
Dead_knight
  • 浏览: 1201047 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
752c8642-b795-3fe6-946e-a4e845bffdec
Spring Securi...
浏览量:240223
33caa84e-18a6-3036-a82b-6e2106a4de63
clojure专题
浏览量:48924
E17ca077-44df-3816-a3fe-471c43f6e1e5
WebLogic11g
浏览量:236878
社区版块
存档分类
最新评论

Spring Security3源码分析-AnonymousAuthenticationFilter分析

阅读更多
AnonymousAuthenticationFilter过滤器对应的类路径为
org.springframework.security.web.authentication.AnonymousAuthenticationFilter
AnonymousAuthenticationFilter过滤器是在UsernamePasswordAuthenticationFilter、BasicAuthenticationFilter、RememberMeAuthenticationFilter这些过滤器后面的,所以如果这三个过滤器都没有认证成功,则为当前的SecurityContext中添加一个经过匿名认证的token,但是通过servlet的getRemoteUser等方法是获取不到登录账号的。因为SecurityContextHolderAwareRequestFilter过滤器在AnonymousAuthenticationFilter前面。

    //省略了日志部分
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        //applyAnonymousForThisRequest永远返回ture
        if (applyAnonymousForThisRequest((HttpServletRequest) req)) {
            //如果当前SecurityContext中没有认证实体
            if (SecurityContextHolder.getContext().getAuthentication() == null) {
                //产生一个匿名认证实体,并保存到SecurityContext中
                SecurityContextHolder.getContext().setAuthentication(createAuthentication((HttpServletRequest) req));
            } else {
            }
        }

        chain.doFilter(req, res);
    }

    protected Authentication createAuthentication(HttpServletRequest request) {
        //产生匿名认证token,注意这里的key、userAttribute是通过解析标签注入的
        AnonymousAuthenticationToken auth = new AnonymousAuthenticationToken(key, userAttribute.getPassword(),
                userAttribute.getAuthorities());
        auth.setDetails(authenticationDetailsSource.buildDetails(request));

        return auth;
    }

anonymous标签配置为。
<anonymous granted-authority="ROLE_ANONYMOUS" enabled="true" username="test"/>

这里username属性容易混淆,username默认为anonymousUser,实际上是注入到UserAttribute的password变量中的。
granted-authority属性注入到UserAttribute的authorities授权列表
分享到:
评论

相关推荐

    SpringBoot_SpringSecurity-源码.rar

    在源码分析中,你可能会看到SpringSecurity如何利用过滤器链来处理HTTP请求,如`UsernamePasswordAuthenticationFilter`用于处理登录请求,`AnonymousAuthenticationFilter`确保未认证用户默认有一个匿名角色,还有`...

    spring security源码分析.pdf

    ### Spring Security 源码分析知识...以上内容涵盖了 Spring Security 3 的源码分析中几个关键点的具体内容。通过对这些内容的深入学习和理解,可以更好地掌握 Spring Security 的工作原理及其在实际项目中的应用技巧。

    spring-security源码,直接引用这个压缩文件即可

    在分析`spring-security 5.0`的源码时,我们可以深入理解其核心机制,帮助我们更好地使用和扩展该框架。 1. **模块结构**: Spring Security 5.0 的源码包含多个模块,如`core`、`config`、`web`等。`core`模块...

    spring security 配置(含源码)

    了解了这些核心概念后,你可以通过`springsecurity-sample`项目中的代码实践,进一步熟悉Spring Security的配置和使用。这个项目可能包含了一个简单的Spring Boot应用,其中已经集成了Spring Security,并提供了一些...

    Spring_Security3_源码分析

    通过这些源码分析,我们可以了解到Spring Security是如何在背后工作,保护应用程序免受未经授权的访问。理解这些组件的工作原理对于定制和优化安全配置至关重要,同时也有助于开发者解决潜在的安全问题。

    spring-security-3.2.9的jar包和源码包

    7. **源码分析**:源码包允许开发者深入研究Spring Security的实现细节,了解其内部的工作流程,这对于自定义扩展和调试是非常有价值的。例如,可以通过阅读`AuthenticationManager`和`UserDetailsService`的实现来...

    spring security简单示例

    6. **源码分析**: Spring Security的源码是开源的,你可以深入研究其内部工作原理,了解每个组件是如何协同工作的。这将帮助你更好地理解和定制这个框架。 7. **工具**: - Spring Security的官方文档和教程是...

    SpringSecurity3框架

    源码分析对于深入理解Spring Security的工作原理至关重要。通过阅读源码,开发者可以了解每个组件如何协同工作,以及如何根据特定需求定制框架。例如,你可以研究`FilterSecurityInterceptor`如何调用`...

    Spring Security.rar

    在描述中提到了"源码"和"工具"标签,这可能意味着该压缩包包含Spring Security的源代码和一些辅助工具。分析源码可以帮助理解其实现原理,而工具可能是用于辅助开发或调试的安全工具。 **学习路径** 学习Spring ...

    Spring_security 3.x 登录权限测试模块.以及源码.

    通过学习和分析这些源代码,你可以深入了解Spring Security的工作原理,以及如何将其集成到你的应用程序中以实现安全控制。对于开发人员来说,理解这些核心概念和组件非常重要,因为它们构成了Spring Security强大...

Global site tag (gtag.js) - Google Analytics