1 Shiro 概述
1.1 功能介绍
img-
Authentication:身份认证/登陆
-
Authorization:授权验证
-
Session Manager:会话管理
-
Cryptography:加密
-
Web Support:Web 支持
-
Caching:缓存
-
Concurrency:并发验证
-
Testing:测试支持
-
Run As:授予权限
-
Remember Me:记住我
1.2 架构说明
img-
Subject 主体:当前操作的用户。可以是通过浏览器请求的用户,也可以是一个运行的程序
-
SecurityManager 安全管理器:对全部的Subject进行安全管理。实质通过Authenticator 认证,Authorizer 授权,SessionManager 会话管理。
-
Authenticator:身份认证器
-
Authorizer:权限认证器
-
Realm:用户权限数据
-
SessionManager :会话管理
-
SessionDAO:session会话操作
-
CacheManager:缓存管理
-
Cryptography:密码管理
2 Shiro.ini
2.1 说明
-
ini初始文件
-
可以连接数据库,不需要ini
2.2 组成部分
-
[main]:定义全局变量
image.png
-
[users]:定义用户名和密码
image.png
-
[roles]:定义角色
image.png
-
[urls]:定义哪些url的过滤器生效
image.png
3 实现认证
3.1 基本概念
-
身份验证:提供principals和credentials证明
-
principals 身份:唯一标识主体,如:用户名、邮箱
-
credentials 证明:主体知道的安全值,如:密码、数字证书
3.2 认证流程
img3.3 使用ini文件完成认证
//1. 创建管理员
DefaultSecurityManager securityManager = new DefaultSecurityManager();
//2. 读取用户权限数据
IniRealm iniRealm = new IniRealm("classpath:shiro.ini");
//3. 设置用户权限数据
securityManager.setRealm(iniRealm);
//4.设置管理员
SecurityUtils.setSecurityManager(securityManager);
//5.获取当前用户
Subject currentUser = SecurityUtils.getSubject();
//还可以获取session
Session session = currentUser.getSession();
session.setAttribute("someKey", "aValue");
//6. 用户验证token
UsernamePasswordToken token = new UsernamePasswordToken("root", "root1");
try {
currentUser.login(token);
System.out.println("验证通过");
} catch (AuthenticationException e) {
log.error("请核对账户与密码");
e.printStackTrace();
}
网友评论