zoukankan      html  css  js  c++  java
  • shiro的授权过程

    1:通过继承shiro的AuthorizingRealm类,并实现它的doGetAuthorizationInfo方法来进行授权。

    2:doGetAuthorizationInfo方法的参数是认证通过的principal的集合(因为可多个realm,且有不同的认证策略)

    3:doGetAuthorizationInfo方法的作用就是:登录认证成功之后,根据认证通过的principal,获取它的角色集合和权限集合,并封装成SimpleAuthorizationInfo对象,最终供shiro的授权器来调用,判断是否具有某个角色或某个权限。

    4:shiro有四种方式会调用doGetAuthorizationInfo方法

    (1):xml配置方式:当登陆成功之后,访问/pages/user.jsp时,会调用doGetAuthorizationInfo方法,判断当前用户是否具有user角色。该种方式拦截到没有权限的url时,会跳转到配置的unauthorizedUrl指向的页面。

    (2):硬编码方式:通过以下代码进行角色活权限的判断时, 实际上最终也会调用doGetAuthorizationInfo方法,判断当前用户是否具有某角色或某权限。如果前端使用beetl标签,可以配合该方式,当做页面元素的判断(因为现在很少用jsp页面了,所以第4种的jsp标签也不咋用了)

    getSubject().isPermitted(permission);

    getSubject().hasRole(roleName);

    (3):注解式:通过在执行的Java方法上放置相应的注解, 实际上最终也会调用doGetAuthorizationInfo方法,判断当前用户是否具有某角色或某权限。该种方式拦截到没有权限的url时,会抛出异常,所以为了界面友好,我们需要捕获异常,跳转到一个友好的页面。可以参考这篇文章:https://blog.csdn.net/ITWANGBOIT/article/details/97640614

    @RequiresRoles("admin")  

    public void hello() {  

            //有权限  

    }   

    @RequiresPermissions("{url}")

    public void hello() {  

         //有权限  

    }   

    (4):JSP/GSP标签:在JSP/GSP页面通过相应的标签来决定是否显示某些页面元素。实际上最终也会调用doGetAuthorizationInfo方法,判断当前用户是否具有某角色或某权限。因为现在很少用jsp页面了,所以该种jsp标签也不咋用了

    <shiro:hasRole name="admin">  

       <input   type="text"    name="userName">

    </shiro:hasRole>  

    5:由于可以给shiro设置多个realm,每个realm都可以仅仅进行认证或授权,或者既认证又授权;而多个realm都认证的话,是根据认证策略将多个realm的认证结果组合成最终的认证结果;但是如果多个realm都授权的话,那么多个realm中只要有一个realm授权过,得到的结果就是true。代码如下:

  • 相关阅读:
    PostgreSQL数据库
    phpcms网站搬家 至 服务器 完整并且详细过程
    phpcms网页替换验证码功能 及 搜索功能
    用phpcms切换中英文网页的方法(不用解析二级域名)、phpcms完成pc和手机端切换(同一域名)
    php判断手机段登录,以及phpcms手机PC双模板调用
    php 手动搭建环境
    phpcms内容页替换
    phpcms列表页替换
    phpcms首页替换
    phpcms栏目点击选中
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302478.html
Copyright © 2011-2022 走看看