Spring权限管理系统流程梳理

梳理权限管理的流程:

-------登录权限验证

    登录之后通过userInfoProvider这个类,

    拿到用户信息中:
        这个类负责的是只是获取登陆用户的详细信息(包括密码、角色、权限等)具体信息为:
        User对象,dataLevel,GrantedAuthority
        不负责和前端传过来的密码对比,只需返回User对象,后会有其他类根据User对象对比密码的正确性(框架帮我们做)。

    拿到用户信息后,
        authenticationManager对比用户的密码(即验证用户)
    然后这个AuthenticationProcessingFilter拦截器就过咯。

    登录成功之后通过securityxml文件的默认成功跳转页面/home进入首页(/home需要判断权限)


-------请求权限验证


    1.AbstractSecurityInterceptor:请求拦截器

      每访问一个url都会被拦截器AbstractSecurityInterceptor拦截

     * 首先,登陆后,每次访问资源都会被这个拦截器拦截,会执行doFilter这个方法,
     * 这个方法调用了invoke方法,其中fi断点显示是一个url(可能重写了toString方法吧,但是里面还有一些方法的),
     * 最重要的是beforeInvocation这个方法,它首先会调用MyInvocationSecurityMetadataSource类的getAttributes方法
     * 获取被拦截url所需的权限,在调用MyAccessDecisionManagerdecide方法判断用户是否够权限。弄完这一切就会执行下一个拦截器。

    2.MySecurityMetadataSource:资源管理器

      将所有的资源和权限对应关系建立起来,即定义某一资源可以被哪些角色访问
      URL-Collection<ConfigAttribute>某个url对应的所需权限集合,其实url对应一个权限代码

     * 上面的拦截器会首先调用这个类来,这个类是负责的是获取角色与url资源的所有对应关系,并根据url查询对应的所有角色。
     * 然后getAttributes根据参数(被拦截url)返回权限集合。
     * 返回url对应的所需权限集合Collection<ConfigAttribute>

通过以上步骤我们获得了user的全部权限和某个url的所需要的权限,下面的工作就简单了

     3.MyAccessDesisionmanager:访问决策器

      决定某个用户具有的角色,是否有足够的权限去访问某个资源 ,做最终的访问控制决定

      * decide方法里面写的就是授权策略了,笔者的实现是,没有明说需要权限的(即没有对应的权限的资源),
      * 可以访问,用户具有其中一个或多个以上的权限的可以访问。这个就看需求了,需要什么策略,读者可以自己写其中的策略逻辑。
      * 通过就返回,不通过抛异常就行了,spring security会自动跳到权限不足页面(配置文件上配的)。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花生糖葫芦侠

创作不易,请多多支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值