安全(权限)框架Shiro概述及原理

1.1 Shiro是什么

Apache Shiro是一个功能强大且易于使用的Java安全(权限)框架。Shiro可以完成:认证、授权、加密、会话管理、与Web集成、缓存 等。借助Shiro您可以快速轻松地保护任何应用程序------从最小的移动应用程序到最大的Web和企业应用程序。

官网:https://shiro.apache.org/

1.2 为什么要用Shiro

自 2003 年以来,框架格局发生了相当大的变化,因此今天仍然有很多系统在使用Shiro。这与Shiro的特性密不可分。

  • 易于使用:使用Shiro构建系统安全框架非常简单。就算第一次接触也可以快速掌握。

  • 全面:Shiro包含系统安全框架需要的功能,满足安全需求的"一站式服务"。

  • 灵活:Shiro可以在任何应用程序环境中工作。虽然它可以在WebEJBIoC环境中工作,但不需要依赖它们。Shiro也没有强制要求任何规范,甚至没有很多依赖项。

  • 强力支持WebShiro具有出色的Web应用程序支持,可以基于应用程序URLWeb协议(例如REST)创建灵活的安全策略,同时还提供一组JSP库来控制页面输出。

  • 兼容性强:Shiro的设计模式使其易于与其他框架和应用程序集成。ShiroSpringGrailsWicketTapestryMuleApache CamelVaadin等框架无缝集成。

  • 社区支持:ShiroApache软件基金会的一个开源项目,有完备的社区支持,文档支持。如果需要,像 Katasoft这样的商业公司也会提供专业的支持和服务。

1.3 ShiroSpring Security的对比

  1. Spring Security基于Spring开发,项目若使用Spring作为基础,配合Spring Security做权限更加方便,而Shiro需要和Spring进行整合开发;
  2. Spring Security功能比Shiro更加丰富些,例如安全维护方面;
  3. Spring Security社区资源相对比Shiro更加丰富;
  4. Shiro的配置和使用比较简单,Spring Security上手复杂些;
  5. Shiro依赖性低,不需要任何框架和容器,可以独立运行,Spring Security依赖Spring容器;
  6. shiro不仅仅可以使用在web中,它可以工作在任何应用环境中。在集群会话时Shiro最重要的一个好处或许就是它的会话是独立于容器的。

1.4 基本功能

1.4.1 基本功能点

如下图所示:

1.4.2 功能简介

(1)Authentication:身份认证/登录,验证用户是不是拥有相应的身份;

(2)Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用 户是否能进行什么操作,如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户 对某个资源是否具有某个权限;

(3)Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有 信息都在会话中;会话可以是普通JavaSE环境,也可以是Web环境的;

(4)Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;

(5)Web SupportWeb支持,可以非常容易的集成到Web环境;

(6)Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;

(7)ConcurrencyShiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;

(8)Testing:提供测试支持;

(9)Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;

(10)Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。

1.5 原理

1.5.1 Shiro架构(Shiro外部来看)

从外部来看Shiro,即从应用程序角度的来观察如何使用Shiro完成工作

Shiro架构

(1)Subject:应用代码直接交互的对象是Subject,也就是说Shiro的对外API核心就是SubjectSubject代表了当前"用户", 这个用户不一定 是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫, 机器人等;与Subject的所有交互都会委托给SecurityManagerSubject其实是一个门面,SecurityManager才是实际的执行者;

(2)SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且其管理着所有Subject;可以看出它是Shiro的核心,它负责与Shiro的其他组件进行交互,它相当于SpringMVCDispatcherServlet的角色

(3)RealmShiro Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户 进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/ 权限进行验证用户是否能进行操作;可以把Realm看成DataSource

1.5.2 Shiro架构(Shiro内部来看)

Shiro架构

(1)Subject:任何可以与应用交互的"用户";

(2)SecurityManager :相当于SpringMVC中的DispatcherServlet;是Shiro的心脏; 所有具体的交互都通过SecurityManager进行控制;它管理着所有Subject、且负责进 行认证、授权、会话及缓存的管理。

(3)Authenticator:负责Subject认证,是一个扩展点,可以自定义实现;可以使用认证策略(Authentication Strategy),即什么情况下算用户认证通过了;

(4)Authorizer:授权器、即访问控制器,用来决定主体是否有权限进行相应的操作;即控 制着用户能访问应用中的哪些功能;

(5)Realm:可以有 1 个或多个Realm,可以认为是安全实体数据源,即用于获取安全实体的;可以是JDBC实现,也可以是内存实现等等;由用户提供;所以一般在应用中都需要实现自己的Realm

(6)SessionManager:管理Session生命周期的组件;而Shiro并不仅仅可以用在Web环境,也可以用在如普通的JavaSE环境;

(7)CacheManager:缓存控制器,来管理如用户、角色、权限等的缓存的;因为这些数据基本上很少改变,放到缓存中后可以提高访问的性能;

仅仅可以用在Web环境,也可以用在如普通的JavaSE环境;

(7)CacheManager:缓存控制器,来管理如用户、角色、权限等的缓存的;因为这些数据基本上很少改变,放到缓存中后可以提高访问的性能;

(8)Cryptography:密码模块,Shiro提高了一些常见的加密组件用于如密码加密/解密。

相关推荐
七七七七071 小时前
【计算机网络】深入理解ARP协议:工作原理、报文格式与安全防护
linux·服务器·网络·计算机网络·安全
qq_5470261792 小时前
Flowable 工作流引擎
java·服务器·前端
鼓掌MVP3 小时前
Java框架的发展历程体现了软件工程思想的持续进化
java·spring·架构
编程爱好者熊浪3 小时前
两次连接池泄露的BUG
java·数据库
lllsure3 小时前
【Spring Cloud】Spring Cloud Config
java·spring·spring cloud
wanhengidc4 小时前
云手机搬砖 尤弥尔传奇自动化操作
运维·服务器·arm开发·安全·智能手机·自动化
鬼火儿4 小时前
SpringBoot】Spring Boot 项目的打包配置
java·后端
NON-JUDGMENTAL4 小时前
Tomcat 新手避坑指南:环境配置 + 启动问题 + 乱码解决全流程
java·tomcat
chxii4 小时前
Maven 详解(上)
java·maven
李少兄4 小时前
IntelliJ IDEA 远程调试(Remote Debugging)教程
java·ide·intellij-idea