什么是Shiro
Shrio是一个基于Java的开源安全框架,可以完成认证授权、会话管理、加密、缓存等功能。对比Spring security更加简单,更加独立,不仅可以在JavaSE中使用,还可以在JavaEE中使用,也能在分布式集群环境下使用。
Shrio的结构体系
- Authentication 认证:验证用户是否合法,也就是登录校验。
- Authorization 授权:对权限的管理,也就是授予用户权限。
- Session Management 会话管理:顾名思义。
- Cryptography 加密:通过加密算法,提供了对用户密码等信息的加密,使加密很便捷。
- Web Support web应用程序支持:Shiro可以很方便的集成到web应用中。
- Caching 缓存:Shiro提供了对缓存的支持支持多种缓存架构(如:EHCache,Redis)。
- Concurrency 并发支持:支持多线程并发访问
- Testing 测试
- “Run As” :支持一个用户在允许的前提下使用另一种身份登录。
- Rememer Me 记住我。
Shiro架构
- Subject 主体:是一个Shiro对外提供的接口,将程序传递给Subject接口然后由Shiro管理。subject不仅代表当前用户,与当前应用交互的任何东西都可以是subject。subject需要绑定到security manager,从而转换为与security manager的交互
- Security Manager 安全管理:即所有subject的管理者,用于实现Shrio的具体功能,是shiro的核心。
- Pluggable Reamls :数据库交互,权限及角色的信息都在数据库中,而reamls就是shiro与数据库的进行交互的组件
shiro-JavaSE
要使用Shiro,就先导入Shiro
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
使用shiro.ini配置文件作为数据源
# 定义用户,用户名=密码,角色
[users]
root = 123456,admin
test = 000000,productManager
# 定义角色
[roles]
# 管理员 什么都可以做
admin = *
# productManager 只可以对产品增删改查
productManager = selectProduct,deleteProduct,updateProduct,addProduct
orderManager = selectOrder,deleteOrder,updateOrder,addOrder
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
public class ShiroDemo01 {
public static void main(String[] args) {
//将ini配置文件加载进来,当作数据源传递给Sercuity Manager,<>中的SecurityManager是shiro中的
Factory<SecurityManager> factory =
new IniSecurityManagerFactory("classpath:shiro.ini");
//获得SecurityManager对象
SecurityManager security