• Spring : Spring Security


    ==========================================================================
    spring-security-过滤器:

    顶级Filter:SecurityContextPersistenceFilter:加载SecurityContext或者创建SecurityContext放在SecurityContextHolder里面。并在所有过滤器执行完之后清空SecurityContextHolder。

    LogoutFilter:处理注销操作。销毁session等。

    AbstractAuthenticationProcessingFilter:处理form登录过滤器,通过用户名密码判断登录是否有效。

    DefaultLoginPageGeneratingFilter:spring-security提供的默认登录页面。

    BasicAuthenticationFilter:与AbstractAuthenticationProcessingFilter类似,验证方式不同。

    SecurityContextHolderAwareRequestFilter:包装客户请求,提供一些额外的数据。

    RememberMeAuthenticationFilter:提供记住登录功能。cookie中存在时,自动创建context。

    AnonymousAuthenticationFilter:匿名用户的登录权限过滤。

    ExceptionTranslationFilter:处理抛出的异常,将请求重定向,或返回错误代码等。

    SessionManagementFilter:防御session攻击,在登录成功后销毁session并重新生成session。

    FilterSecurityInterceptor:用户授权控制,如果尚未认证,那么抛出尚未认证异常,如果已登录但没有权限,则抛出拒绝访问异常。如果已登录,而且有权限,则通过过滤。

    FilterChainProxy:按照顺序调用一组Filter。

    ========================================================================
    spring-security-数据库管理:

    需要实现 UserDetailsService接口,并实现loadUserByUsername方法。这个方法返回一个UserDetail对象。
    UserDetails接口:用户相关信息:
    getAuthorities() 权限集合
    getPassword() 密码
    getUsername() 用户名
    isAccountNonExpired() 有没有过期
    isAccountNonLocked() 有没有锁定
    isCredentialsNonExpired()证书有没有过期
    isEnabled() 账户是否有效

    整个流程:从请求中(cookie中或参数中等)获取请求验证信息,如用户名和密码,然后放入一个未认证的Authentication中,与UserDetail进行匹配,生成一个新的已认证的Authentication供其他组件使用。

    =======================================================================
    spring-security-权限缓存

    CachingUserDetailsService: 需要一个UserDetailsService,如果没有UserCache,则使用UserDetailsService获取User并放入UserCache里面。

    =========================================================================
    spring-security-决策管理

    AccessDecisionManager:决策管理器。对应的抽象类为:AbstractAccessDecisionManager(自定义需要继承它)
    supports方法即为授权关键方法,返回true即为有权限,里面会循环一组AccessDecisionVoter所有Voter通过才返回true

    RoleVoter:最常用的投票器,定义了权限的前缀 ROLE_ ,vote方法即为选举方法,authentication为当前用户的权限,attributes为访问所需权限,如果有权限,那么返回 ACCESS_GRANTED

    有三个已经实现的决策管理器(继承AbstractAccessDecisionManager):
    AffirmativeBased:有一个投票器通过,就会通过。
    ConsensusBased:有一半以上投票器通过,才会允许访问。
    UnanimousBased:所有投票器全部通过,才会允许访问。

    架构图:

  • 相关阅读:
    ibatis常用sql
    在eclipse中部署maven项目的问题
    如何成为一个设计师和程序员混合型人才
    一个程序员的读书笔记:程序设计的反思
    C# 中的 == 和 equals()有什么区别?
    2014百度之星资格赛解题报告:能量变换
    2014百度之星资格赛解题报告:Xor Sum
    2014百度之星资格赛解题报告:Labyrinth
    那些年我们一起追过的ACM
    最新全球排名前50网站前端开发语言统计
  • 原文地址:https://www.cnblogs.com/cccy0/p/10688442.html
Copyright © 2020-2023  润新知