zoukankan      html  css  js  c++  java
  • 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:所有投票器全部通过,才会允许访问。

    架构图:

  • 相关阅读:
    Java基础教程:面向对象编程[3]
    Java拓展教程:文件DES加解密
    JavaScript:学习笔记(4)——This关键字
    jQuery:[2]百度地图开发平台实战
    Android开发——减小APK大小
    玩转ButterKnife注入框架
    Java技术——多态的实现原理
    RxAndroid结合Retrofit,看看谁才是最佳拍档!
    Android开发——AsyncTask的使用以及源码解析
    10本比较鸡肋的技术类书籍,简要回顾
  • 原文地址:https://www.cnblogs.com/cccy0/p/10688442.html
Copyright © 2011-2022 走看看