首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

shiro 整合 spring 实战及源码详解

序言

前面我们学习了如下内容:

5 分钟入门 shiro 安全框架实战笔记

shiro 安全框架入门,看这一篇就够了

相信大家对于 shiro 已经有了最基本的认识,这一节我们一起来学习写如何将 shiro 与 spring 进行整合。

spring 整合

maven 依赖

服务类定义

定义一个简单的服务类,用于演示 注解的权限校验。

快速开始

我们对原来的 Quick Start 进行改造如下:

这里最核心的区别是 是直接通过 注入得到的。

也没有看到我们以前初始化 SecurityManager 的 ini 文件,这些在下面的配置文件中。

配置类

这里通过 的方式声明了用户角色等信息,可以简单理解为和 Ini 文件初始化是等价的。

导入了 3 个配置类,我们后面进行介绍。

启动

spring 应用的启动:

ShiroBeanConfiguration 配置类

共计导入了 3 个配置类,我们接下来逐一分析下这 3 个配置类。

源码

这 3 个方法都是继承自父类,直接调用的父类方法。

AbstractShiroBeanConfiguration.java

实际上这里初始化了 3 个对象:LifecycleBeanPostProcessor/DefaultEventBus/ShiroEventBusBeanPostProcessor。

LifecycleBeanPostProcessor

这个类实际上比较简单,主要做了 2 件事情。

(1)执行 init() 和 destory()。

(2)指定对应的优先级,默认为最低。

核心部分如下:

init 初始化

destory 销毁

DefaultEventBus

这个类如其名,就是默认的事件总线类。

接口的如下:

分别对应的是事件的发布,注册和取消注册。

实现部分实际就是调用对应的 EventListener 类,并且通过读写锁保证并发安全,暂时不做展开。

ShiroEventBusBeanPostProcessor

这个类实际上是配合 EventBus 使用的,核心实现如下:

这里会把实现了 EventBusAware 接口,和指定了 注解的对象,注解对应的 eventbus。

ShiroConfiguration 配置

思考

我们 QuickStart 中自动注入了 对象,这个对象是在哪里初始化的呢?

核心源码

核心部分如下:

这里可以发现实际上已经导入了 ShiroBeanConfiguration 配置类,所以官方的 demo 可以简化如下:

实际测试了一下,也是通过的。

SecurityManager 初始化

我简单的看了下 SecurityManager 实现子类还是比较多得。断点可以发现默认的类型是 。

这些都可以在 类中找到答案。

AbstractShiroConfiguration.java

核心实现如下:

方法会把我们 CliApp 中定义的 Realm 对象当作参数传入。

createSecurityManager() 方法就会初始化 对象。

ShiroAnnotationProcessorConfiguration 配置

思考

我们在 SampleService 中使用了注解 ,就可以校验对应的权限了。

但是这一切是如何被自动实现的呢?

源码

本身没有什么源码,主要看下父类。

AbstractShiroAnnotationProcessorConfiguration

是 spring 中的自动代理实现类,此处不做展开。

我们重点看一下 对象:

AuthorizationAttributeSourceAdvisor

这里主要做了两件事:

(1)设置对应的 securityManager

(2)处理有 等 shiro 的内置注解的方法。

AopAllianceAnnotationsAuthorizingMethodInterceptor

这个名字起的,好家伙,真长。

这里就是对于注解的响应方法 aop 拦截器实现。

到这里实际上就比较简单了,相信聪明如你一定已经知道整个 spring-shiro 面纱背后的秘密了。

我们直接看一下 的实现。

PermissionAnnotationMethodInterceptor

处理类实现如下:

小结

这一节我们讲解了如何整合 spring 与 shiro,下一节我们将实战整合 springboot 与 shiro,感兴趣的小伙伴可以关注一波不迷路。

为了便于大家学习,所有源码都已开源:

https://gitee.com/houbinbin/shiro-inaction/tree/master/shiro-inaction-02-springalone

希望本文对你有所帮助,如果喜欢,欢迎点赞收藏转发一波。

我是老马,期待与你的下次相遇。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210104A0H2Y500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券