shiro概述
shiro发音shee-roh,是Apache下的一开源项目创始人来自日本。shiro是一个安全框架,用于身份验证和授权,基于以下四大模块提供了一些通俗易懂的API接口:
- Authentication - 提供用户识别,也可叫login(我是谁?)
- Authorization - 权限控制 (我能做什么?)
- Cryptography - 保护和隐藏数据
- Session Management - Session会话管理
核心概念
Subject
Sbuject一词在信息安全领域意思大致为“the currently executing user”, 这里可以理解为User但是又不限于User,它可以是第三方进程、守护进程账号等类似的任何东西。程序中获取Subject的方法:
import org.apache.shiro.subject.Subject; import org.apache.shiro.SecurityUtils; ... Subject currentUser = SecurityUtils.getSubject();
获取到Subject后,90%的事情你都可以通过Shiro来完成,比如:登录、退出、访问Session、授权检查等。
SecurityManager
SecurityManager是整个Shiro的核心。一图胜千言:
启动一个SecurityMananger实例,对于web application项目需要在web.xml 里面配置Filter即可:
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>
org.apache.shiro.web.servlet.IniShiroFilter
</filter-class>
<!-- no init-param means load the INI config
from classpath:shiro.ini -->
</filter>
非web项目目前官网采用INI配置文件进行配置:
[main]
cm = org.apache.shiro.authc.credential.HashedCredentialsMatcher
cm.hashAlgorithm = SHA-512
cm.hashIterations = 1024
# Base64 encoding (less text):
cm.storedCredentialsHexEncoded = false
[users]
jdoe = TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJpcyByZWFzb2
asmith = IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbXNoZWQsIG5vdCB
INI文件包含两部分:main和users.
- [main] 用于配置SecurityManager对象或SecurityManager使用的任何对象(如Realms)
- [users] 定义一个用户静态列表,便于测试或应用。
加载shiro.ini配置文件:
//1. Load the INI configuration Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); //2. Create the SecurityManager SecurityManager securityManager = factory.getInstance(); //3. Make it accessible SecurityUtils.setSecurityManager(securityManager);
Realms
Realms在Shiro和应用程序数据安全之间扮演着桥梁、连接的角色(A Realm acts as the ‘bridge’ or ‘connector’ between Shiro and your application’s security data.)。 通俗的讲相当与扮演了一个安全的DAO层,可以控制用户对数据库的操作、查询域。