Shiro-用户手册
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Shiro用户手册
Shiro架构介绍
一、什么是Shiro
Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功
能:
* 认证-用户身份识别,常被称为用户登录”
«授权-访问控制;
* 密码加密-保护或隐藏数据防止被偷窥;
* 会话管理-每用户相关的时间敏感的状态。
对于任何一个应用程序,Shiro都可以提供全面的安全管理服务。并且相对于其他安全框架, Shiro要简单的多。
Shiro的架构介绍
Subject :即当前操作用户”但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Accou nt )或其他类似事物。它仅仅意味着当前跟软件
交互的东西”。但考虑到大多数目的和用途,你可以把它认为是Shiro的用户”概念。Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。
SecurityManager :它是Shiro 框架的核心,典型的Facade 模式,Shiro 通过SecurityManager
来管理内部组件实例,并通过它来提供安全管理的各种服务。
Realm : Realm充当了Shiro与应用安全数据间的桥梁”或者连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。
从这个意义上讲,Realm实质上是一个安全相关的DAO :它封装了数据源的连接细节,并
在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认
证和(或)授权。配置多个Realm是可以的,但是至少需要一个。
Shiro内置了可以连接大量安全数据源(又名目录)的Realm,如LDAP、关系数据库
(JDBC )、
类似INI的文本配置资源以及属性文件等。如果缺省的Realm不能满足需求,你还可以插
入代表自定义数据源的自己的Realm实现。
Shiro完整架构图:
除前文所讲 Subject 、SecurityManager 、Realm 三个核心组件外,Shiro 主要组件还包括:
Authe nticator :认证就是核实用户身份的过程。这个过程的常见例子是大家都熟悉的 用户
/密码”组合。多数用户在登录软件系统时,通常提供自己的用户名(当事人)和支持他们的 密码(证书)。如果存储在系统中的密码(或密码表示)与用户提供的匹配,他们就被认为 通过认证。
Authorizer :授权实质上就是访问控制-控制用户能够访问应用中的哪些内容, 比如资源、
Web 页面等等。
Sessio nMan ager :在安全框架领域,
Apache Shiro 提供了一些独特的东西:可在任何应
用或架构层一致地使用 Session API 。即,Shiro 为任何应用提供了一个会话编程范式 -从
小型后台独立应用到大型集群
Web 应用。这意味着,那些希望使用会话的应用开发者,不
必被迫使用Servlet 或EJB 容器了。或者,如果正在使用这些容器,开发者现在也可以选择 使用在任何层统——致的会话
API ,取代Servlet 或EJB 机制。
CacheManager :对Shiro 的其他组件提供缓存支持。
Web MVC
^Subjsct) 日町
Local / In*Process
VM / Network Bounds
Security Manager
Authenticator
Authorizer
g
RDBMS LDAP
PrDpri&tai^
Standalone Application
Acbve
Directory
Authentication^ _ Sti^Legy
J
Session Manager
Rflx SikBrlight Swing (^Subjed)
C/C++ C# .NE T
Memory, RDBMS, p 旳 Tata 已 etc.
Cache Manager
Session
DAO
{cache)
Pluggable Realms (1 or more) JDflC Rea m
LDAP
Realm @auh j
CuytOTT i Raa )m
Shiro认证
认证就是验证用户身份的过程。在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法。最常见的实体/凭证”组合便是用户名/密码”组合。
亠、Shiro认证过程
1、收集实体/凭据信息
Java代码曲
1. //Example using most common scenario of username/password pair:
2. UsernamePasswordToken token = new UsernamePasswordToken(username, passwor
d);
3. // ” Rememb Me" built-in:
4. token.setRememberMe( true );
UsernamePasswordToke n 支持最常见的用户名/密码的认证机制。同时,由于它实现了RememberMeAuthenticationToken 接口,我们可以通过令牌设置记住我"的功能。
但是,已记住”和已认证”是有区别的:
已记住的用户仅仅是非匿名用户,你可以通过subject.getPri ncipals()获取用户信息。但是
它并非是完全认证通过的用户,当你访问需要认证用户的功能时,你仍然需要重新提交认证信息。
这一区别可以参考亚马逊网站,网站会默认记住登录的用户,再次访问网站时,对于非敏感
的页面功能,页面上会显示记住的用户信息,但是当你访问网站账户信息时仍然需要再次进
行登录认证。
2、提交实体/凭据信息
Java代码理
1. Subject currentUser = SecurityUtils.getSubject();
2. currentUser」o gin(token);
收集了实体/凭据信息之后,我们可以通过SecurityUtils工具类,获取当前的用户,然后通
过调用login方法提交认证。