Shiro

作者: AMD_Ryzen | 来源:发表于2020-04-07 23:13 被阅读0次

1 Shiro 概述

1.1 功能介绍

img
  1. Authentication:身份认证/登陆

  2. Authorization:授权验证

  3. Session Manager:会话管理

  4. Cryptography:加密

  5. Web Support:Web 支持

  6. Caching:缓存

  7. Concurrency:并发验证

  8. Testing:测试支持

  9. Run As:授予权限

  10. Remember Me:记住我

1.2 架构说明

img
  1. Subject 主体:当前操作的用户。可以是通过浏览器请求的用户,也可以是一个运行的程序

  2. SecurityManager 安全管理器:对全部的Subject进行安全管理。实质通过Authenticator 认证,Authorizer 授权,SessionManager 会话管理。

  3. Authenticator:身份认证器

  4. Authorizer:权限认证器

  5. Realm:用户权限数据

  6. SessionManager :会话管理

  7. SessionDAO:session会话操作

  8. CacheManager:缓存管理

  9. Cryptography:密码管理

2 Shiro.ini

2.1 说明

  1. ini初始文件

  2. 可以连接数据库,不需要ini

2.2 组成部分

  1. [main]:定义全局变量


    image.png
  1. [users]:定义用户名和密码


    image.png
  1. [roles]:定义角色


    image.png
  1. [urls]:定义哪些url的过滤器生效


    image.png
image.png

3 实现认证

3.1 基本概念

  1. 身份验证:提供principals和credentials证明

  2. principals 身份:唯一标识主体,如:用户名、邮箱

  3. credentials 证明:主体知道的安全值,如:密码、数字证书

3.2 认证流程

img

3.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();
}

相关文章

网友评论

      本文标题:Shiro

      本文链接:https://www.haomeiwen.com/subject/jdkaphtx.html