关闭

Shiro的应用深入学习

1121人阅读 评论(5) 收藏 举报
分类:

     上一篇中宏观上分享了Shiro的原理,今天将分享基于url的权限认证授权,以及Shiro的认证与授权的原理和流程

基于url的权限管理流程

                                    

优点:

  使用基于url拦截的权限管理方式,实现起来比较简单,不依赖框架,使用web提供filter就可以实现。

问题:

  需要将所有的url全部配置起来,有些繁琐,不易维护,url(资源)和权限表示方式不规范。

Shiro的认证流程

                                                                  
执行流程:

     1、通过ini配置文件创建securityManager

     2、调用subject.login方法主体提交认证,提交的token

     3、securityManager进行认证,securityManager最终由ModularRealmAuthenticator进行认证。

     4、ModularRealmAuthenticator调用IniRealm(给realm传入token) 去ini配置文件中查询用户信息

     5、IniRealm根据输入的token(UsernamePasswordToken)从 shiro-first.ini查询用户信息,根据账号查询用户信息(账号和密码)

     如果查询到用户信息,就给ModularRealmAuthenticator返回用户信息(账号和密码)

     如果查询不到,就给ModularRealmAuthenticator返回null

     6、ModularRealmAuthenticator接收IniRealm返回Authentication认证信息

      如果返回的认证信息是null,ModularRealmAuthenticator抛出异常(org.apache.shiro.authc.UnknownAccountException) 

       如果返回的认证信息不是null(说明inirealm找到了用户),对IniRealm返回用户密码 (在ini文件中存在)和 token中的密码 进行对比,如果不一致抛出异 常(org.apache.shiro.authc.IncorrectCredentialsException

注意:

        ModularRealmAuthenticator作用进行认证,需要调用realm查询用户信息(在数据库中存在用户信息)

        ModularRealmAuthenticator行密码对比(认证过程)。

        realm:需要根据token中的身份信息去查询数据库(入门程序使用ini配置文件),如果查到用户返回认证信息,如果查询不到返回null

Shiro的授权流程

                                            
执行流程:

         1、对subject进行授权,调用方法isPermitted"permission"

         2SecurityManager执行授权,通过ModularRealmAuthorizer执行授权

         3ModularRealmAuthorizer执行realm(自定义的CustomRealm)从数据库查询权限数据

调用realm的授权方法:doGetAuthorizationInfo 

        4realm从数据库查询权限数据,返回ModularRealmAuthorizer

        5ModularRealmAuthorizer调用PermissionResolver进行权限串比对

        6、如果比对后,isPermitted"permission"realm查询到权限数据中,说明用户访问permission串有权限,否则没有权限,抛出异常。


     另外在web系统中,shiro也通过filter进行拦截。filter拦截后将操作权交给spring中配置的filterChain(过虑链儿),shiro提供很多filter。

    

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:190660次
    • 积分:5989
    • 等级:
    • 排名:第4194名
    • 原创:138篇
    • 转载:8篇
    • 译文:0篇
    • 评论:1837条
    博客专栏