IT小栈

  • 主页
  • Java基础
  • RocketMQ
  • Kafka
  • Redis
  • Shiro
  • Spring
  • Spring Boot
  • Spring Cloud
  • 资料链接
  • 关于
所有文章 友链

IT小栈

  • 主页
  • Java基础
  • RocketMQ
  • Kafka
  • Redis
  • Shiro
  • Spring
  • Spring Boot
  • Spring Cloud
  • 资料链接
  • 关于

Shiro授权验证

2019-07-29

上节我们对认证过滤器的整个处理流程通过源码梳理了一下,本节我们将了解另一个重量级的过滤器授权过滤器PermissionsAuthorizationFilter,下面我们具体分析下。

PermissionsAuthorizationFilter也是AccessControlFilter的子类实现

AccessControlFilter也会执行onPreHandle()

1
2
3
public boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
return isAccessAllowed(request, response, mappedValue) || onAccessDenied(request, response, mappedValue);
}

查看具体实现在PermissionsAuthorizationFilter.isAccessAllowed()

从该方法中我们可以知道默认是允许访问的boolean isPermitted =true当我们对某个资源的权限标识为null则意味着它可以被所有人访问。

调用DelegatingSubject.isPermitted()

1
2
3
4
public boolean isPermitted(String permission) {
//判断是否有账号,根据账号获取其拥有的所有权限和当前资源的权限进行比较
return hasPrincipals() && securityManager.isPermitted(getPrincipals(), permission);
}

关于Subject的hasPrincipals()方法我们下一节会分析Subject创建过程,有账号才能来验证有没有权限,调用AuthorizingRealm类中的isPermitted()

获取认证信息

我们需要自己去继承Realm接口实现,获取权限信息

获取的该用户所拥有的权限标识信息与该资源的需要的权限信息比较是否存在,存在则有访问权限,不存在则没有访问权限

我们看一下onAccessDenied方法的具体实现,也就是不具备访问权限时如何处理

具体看看如何判断是否有权限

下面我们重点介绍:

如何根据权限名获取权限信息 、如何根据用户角色获取权限信息

  • 根据权限名获取权限信息

  • 根据用户角色获取权限信息

本文作者: 顾 明 训
本文链接: https://www.itzones.cn/2019/07/29/Shiro授权验证/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
  • shiro源码分析
  • shiro

扫一扫,分享到微信

微信分享二维码
Shiro中Subject与Session
Shiro认证流程
目录,不存在的…
© 2020 IT小栈
载入天数...载入时分秒... || 本站总访问量次 || 本站访客数人次
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链

tag:

  • jvm
  • Java基础
  • kafka HW
  • kafka Leader Epoch
  • kafka
  • kafka位移主题
  • kafka位移提交
  • kafka副本机制
  • kafka ISR
  • zookeeper
  • kafka消息丢失
  • kafka日志存储
  • kafka Log Clean
  • kafka Log Compaction
  • kafka消费位移设置
  • kafka Rebalance
  • kafka分区算法
  • kafka生产者拦截器
  • kafka SASL/SCRAM
  • kafka ACL
  • redis
  • redis Ziplist
  • redis Hashtable
  • redis LinkedList
  • redis QuickList
  • redis intset
  • redis String
  • redis SDS
  • redis SkipList
  • redisDb
  • redisServer
  • redis 简介
  • Redis Cluster
  • 主从同步
  • RocketMQ高可用HA
  • 事务消息
  • 内存映射
  • MMAP
  • 同步刷盘
  • 异步刷盘
  • 消息存储文件
  • RocketMQ安装
  • 延迟消息
  • RocketMQ入门
  • 推拉模式
  • PushConsumer
  • 消费结果处理
  • rebalance
  • RocketMQ权限控制
  • RocketMQ ACL
  • 消息过滤
  • 消息重试
  • 消费位置
  • 集群消费
  • 广播消费
  • 运维命令
  • shiro源码分析
  • shiro入门
  • IOC和DI
  • Spring创建Bean
  • Bean生命周期
  • Sping属性注入
  • 异常
  • SpringMVC
  • springCloud
  • Eureka

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 我的OSCHINA
  • 我的CSDN
  • 我的GITHUB
  • 一生太水