Springboot集成shiro
Springboot集成shiro
(1) shiro功能介绍
Authentication: 身份认证,登录
Authorization:验证权限,即,验证某个人是否有做某件事的权限
Session Management :会话管理,普通用户特定的会话,支持web。
Cryptography :加密,保证数据安全
(2)其他特性
Web Support:web支持,更容易继承web应用
Caching:缓存
Concurrency:多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;
Testing:提供测试支持
Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问
Remember Me:记住我,即记住登录状态,下次再来的话就不用登录了
(3)架构服务
从最顶层看shiro,有三个最基本概念:Subject,SecurityManageer,Realm
- Subject:主体,抽象的概念,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等,
- SecurityManageer:安全管理器,shiro的核心,即所有与安全有关的操作都会与SecurityManageer交互,并且它管理着所有的Subject。
- Realm:shiro和应用程序的权限数据之间的桥梁,为shiro提供安全数据,SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法,也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。
shiro架构图如下
Authentication和Authenticator的主要流程
- Authentication(认证):
与认证流程相关的Shiro各对象关系如下:
以更加清晰的流程图对应上述的步骤:
- Authenticator(授权): 与授权相关的Shiro个对象关系如下:
换成流程图对应上述的步骤:
-
Subject(org.apache.Shiro.subject.mgt.Subject)
与应用交互的主体,例如用户,第三方应用等
-
SecurityManageer(org.apache.Shiro.session.mgt.SecurityManageer)
相当于SpingMVC中的DispatcherServlet;是Shiro的心脏,所有具体的交互都通过Security Manageer进行控制,它管理者所有的Subject,且负责进行认证,授权,会话,及缓存的管理
-
Authenticator(org.apache.Shiro.session.authc.Authenticator)
负责Subject认证,是一个扩展点,可以自定义实现,可以使用认证策略(AuthenticationStrategy),即什么情况下算用户认证通过了
-
Authorizer(org.apache.Shiro.session.authz.Authorizer)
授权器,即访问控制器,用来决定主体是否有权限进行相应的操作,即控制着用户能访问应用中的哪些功能
-
SessionManager(org.apache.shiro.session.mgt.SessionManager)
会话管理
-
SessionDao(org.apache.shiro.session.mgt.eis.SessionDao)
数据访问对象,对session进行CRUD
-
Cryptography(org.apache.shiro.cache.Cryptography)
-
密码模块,Shiro提高了一些常见的加密组件用于密码加密,解密等。
-
CacheManager(org.apache.shiro.cache.CacheManager)
缓存管理器,创建和管理缓存,为authentication,authorization和session management提供缓存数据,避免直接访问数据库,提高效率。
-
Realm(org.apache.shiro.realm.Realm)
可以有一个或者多个的Realm,可以认为安全实体数据源,即用于获取安全实体的,可以用JDBC实现,也可以是内存实现等等,由用户提供,所有一般在应用中都需要实现自己的Realm
从博客学习整合
乾乾君子:博客学习