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

shiro 权限框架自定义Realm

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

在自定义Realm中,可以进对数据库的查询,将认证后的用户的资源权限全部查询出来。   /** * 自定义Realm * @author LiuHuiChao * */ public clas...

Shiro入门10:自定义Realm进行授权

需求:     |---前一个的程序通过shiro-permission.ini作为数据源对权限信息进行静态配置,实际开发中从数据库中获取权限数据         就需要自定义realm,由Realm...

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

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

Shiro多个Realm认证及授权

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

5.Authenticator(登录验证器)

Authenticator在shiro中是主要负责验证用户登录,它通常和一组Realm来协调、交互验证用户登录。一般情况下我们不会直接使用Authenticator。而是交由SecurityManag...

Apache Shiro的特点

Apache Shiro具有以下特点: 易于使用 - 易用性是这个项目的最终目标。提供易于理解的 Java Security API。广泛性 - 没有其他安全框架可以达到Apache Shiro...

shiro的基本认识

Shiso 1、hiro的简介 1、1Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Sp...

Shiro 学习应用

和 Spring Security 一样,Shiro 也属于权限安全框架。和 Spring Security 相比,Shiro 更简单,学习曲线更低。这里记下学习 Spring 4.x + Shiro...

Shiro学习(20)无状态Web应用集成

在一些环境中,可能需要把Web应用做成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时带上相应的用户名进行登录。如一些REST风格的API,如果不使用OAuth2协议,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Shiro的应用深入学习
举报原因:
原因补充:

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