多说一句,在学习shiro之前,我觉得应该先用 filter ,自己动手写过粗粒度的权限系统,而不要一上来就使用框架。
shiro简介
shiro
系出名门Apache
,是一个权限框架。- 可以在
javaSE
、javaEE
环境中使用。 shiro
可以完成认证,授权,加密,会话管理,缓存等功能;- 与
spring security
比较,不落下风,更胜一筹,胜在简洁易用,胜在不依赖任何框架,spring security
依赖于spring
,但是spring security
可以控制粒度更细。。。
功能介绍
-
Authentication
登陆/身份认证在登陆的时候,验证某个用户是否拥有相应的身份,也就是是否是系统的使用人员;
-
Authorization
授权/权限认证验证某个已经认证通过,成功登陆的用户,是否拥有某个权限,一般是判断该身份拥有的角色的权限;
-
Session Manger
会话管理用户登陆以后,在没有退出之前,用户的所有信息都保存在会话中,如果是在
WEB
环境中,则是HttpSession
,如果实在JavaSE
环境中,则是由shiro
提供的session
; -
Cryptography
加密对数据进行加密。比如讲密码加密存进数据库里面;
-
Web Support Web
支持Web
支持,很容易的集成到Web
环境中 ; -
Caching
缓存用户登录以后,对其信息,比如角色/权限信息进行缓存,下次再用的时候,不用再去查数据库,可以提供效率 ;
-
Concurrency
多线程认证Shiro
支持多线程的并发认证,即一个线程中开启另外一个线程,可以将权限传播过去 ; -
Testing
提供测试支持;
-
Run As
允许一个用户伪装成另外一个用户的身份进行访问,如果允许的话 ;
-
Remember Me
记住我,成功登陆一次以后,下次不再需要登陆 ;
从外部看 Shiro 架构
-
Application Code
即应用程序代码 ;
-
Subject
与应用程序代码直接交互的对象就是
Subject
,代表当前用户 ,在shiro
看来,任何东西,只要你与应用程序代码进行交互了,就把你看做是一个Subject
,不管你是具体的人,还是只是爬虫,统统都看作Subject
。Subject
其实像一个对外暴露接口一样,只是门面,任何具体的操作,都交给了后面的SecurityManager
; -
SecurityManager
安全管理器,所有安全相关的操作,都会与它进行交互,比如认证、授权等功能;
它是
Subject
背后的大BOSS
,管理所有的Subject
,也是整个Shiro
的中央枢纽,类比于springMvc
的 前端控制器;。连接
Subject
与Realm
,负责与Shiro
的其他组件进行交互 ; -
Realm
SecurityManager
下面务实的小弟,整个Shiro
需要获取权限、身份等安全数据的时候,都需要从Realm
这里获取,它可以看着是一个 数据源 ;
从内部看 Shiro 架构
-
Subject
任何与应用进行交互的存在
-
SecurityManager
Shiro
的话事人,中央枢纽,负责进行认证、授权、会话、缓存等功能 ; -
Authenticator
负责对
Subject
进行认证,内部可以自定义认证策略(Authentication Strategy
) ; -
Authorizer
授权器,对
Subject
进行权限的判定 ,判断是否拥有某个权限; -
Realm
安全数据的来源,可以拥有多个
Realm
,可以从内存中获取,也可以从数据库获取,由使用者进行提供,因此一般在应用需要实现自己的Realm
; -
SessionManager
管理
Session
的生命周期; -
CacheManager
缓存控制器,管理缓存的安全数据,比如用户的角色、权限等信息
-
Cryptography
密码模块,Shiro 提供了常见的加密组件;