Shiro的应用深入学习

原创 2016年05月31日 17:47:37

     上一篇中宏观上分享了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。

    

版权声明:本文为博主原创文章,未经博主允许不得转载。

shiro实现不同身份使用不同Realm进行验证

假设现在有这样一种需求:存在两张表user和admin,分别记录普通用户和管理员的信息。并且现在要实现普通用户和管理员的分开登录,即需要两个Realm——UserRealm和AdminRealm,分别...
  • xiangwanpeng
  • xiangwanpeng
  • 2017年02月01日 00:14
  • 8687

Shiro多个Realm认证及授权

关于Shiro多个Realm这个问题,也算是被烦的焦头烂额,万幸在疯狂百度后也算是得出了一个解决方案 解决方案如下:  首先自定义一个DefaultUsernamepasswordToken.jav...
  • TanZhen_1314
  • TanZhen_1314
  • 2016年08月04日 17:56
  • 8059

Springboot多realm集成,无ini文件,无xml配置

网上shiro的集成案例在多realm这块基本都是基于ini配置文件的,或者部分基于xml配置。本人使用springboot框架,这种技术本身出发点就是标榜少配置文件或0配置(pom除外)。所以这里我...
  • qq_35981283
  • qq_35981283
  • 2017年11月25日 15:41
  • 184

shiro 认证 配置单个realm和多个realm时的写法

认证: 配置单个realm时,不涉及modularRealmAuthenticator, 因此,也就不涉及认证策略 配置单个realm时. applicationContext.xml: ...
  • wudinaniya
  • wudinaniya
  • 2017年08月30日 21:50
  • 923

shiro 权限框架自定义Realm

shiro 权限框架自定义Realm
  • u012014505
  • u012014505
  • 2016年09月10日 18:14
  • 3211

Shiro Review——自定义Realm实现授权

在自定义Realm中,可以进对数据库的查询,将认证后的用户的资源权限全部查询出来。   /** * 自定义Realm * @author LiuHuiChao * */ public clas...
  • lhc2207221755
  • lhc2207221755
  • 2016年06月10日 10:59
  • 2152

Apache Shiro 授权过程

下面详细介绍在进行授权时,Shiro的内部处理机制。 如上图,我们通过Shiro架构图的授权部分,来说明Shiro授权内部的处理顺序: 1. 应用程序或框架代码调用任何Subject 的h...
  • peterwanghao
  • peterwanghao
  • 2012年11月02日 14:08
  • 6622

第三章 授权(三)Authorizer、PermissionResolver及RolePermissionResolver(自定义Realm+JDBCRealm)

Authorizer的职责是进行授权(访问控制),是Shiro API中授权核心的入口点,其提供了相应的角色/权限判断接口,具体请参考其Javadoc。 SecurityManager 继承了Auth...
  • yifanSJ
  • yifanSJ
  • 2017年08月18日 01:08
  • 215

shiro认证授权流程

shiro框架的出现使得认证和授权变的简单,那shiro是如歌进行认证和授权的呢,下面来看看其流程: 认证流程: 认证流程: 1、通过ini配置文件创建securityManager...
  • u010927139
  • u010927139
  • 2016年06月30日 11:41
  • 661

Apache Shiro的特点

Apache Shiro具有以下特点: 易于使用 - 易用性是这个项目的最终目标。提供易于理解的 Java Security API。广泛性 - 没有其他安全框架可以达到Apache Shiro...
  • peterwanghao
  • peterwanghao
  • 2012年09月19日 17:41
  • 6133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Shiro的应用深入学习
举报原因:
原因补充:

(最多只允许输入30个字)