首页 > 其他分享 >Apache Shiro

Apache Shiro

时间:2022-10-14 22:33:13浏览次数:64  
标签:admin 用户 token user Apache Shiro

Apache Shiro

目录

简介

Apache Shiro:Java 安全框架

功能:

  • 认证 Authentication
  • 授权 Authorization
  • 加密 Crytography
  • 会话管理 Session Management

概念:

  • Subject
  • Security Manager
  • Realm(数据源)

API

权限配置 shiro.ini

# 用户和角色
[users]
# 用户 root,密码 secret,角色 admin
root = secret, admin
guest = guest, guest
skroob = 12345, president
# 用户 docker,密码 12345,角色 admin, container
docker = 12345, admin, container

# 角色和权限
[roles]
# admin 拥有所有权限
admin = *
# author 拥有博客下的所有权限
author = blog:*
# action:type:instace id
goodguy = winnebago:drive:eagle5

创建 SecurityManager:

Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();

SecurityUtils.setSecurityManager(securityManager);

获取当前用户(未登录匿名用户):

Subject user = SecurityUtils.getSubject();

获取用户会话:

Session session = user.getSession();
session.setAttribute("key", "value");

用户登录:

if (!user.isAuthenticated()) {
    UsernamePasswordToken token = new UsernamePasswordToken("username", "password");
    token.setRemenberMe(true);
    user.login(token);
}

捕获登录异常:

try {
    user.login(token);
} catch(UnknownAccountException e) {
    // 用户名不存在
} catch(IncorrectCredentialsException e) {
    // 密码错误
} catch(LockedAccountException e) {
    // 用户被锁定
} catch (AuthticationException e) {
    // 其他异常
}

安全最佳实践:登录失败是,不要给用户返回过于详细的信息(比如,账号不存在、密码错误),避免被黑客恶意利用

获取用户名:

user.getPrincipal();

检查用户角色:

if (user.hasRole("admin")) {}

检查用户权限:

if (user.isPermitted("file:write")) {}

用户登出并清除会话:

user.logout();

Spring Boot 集成 Apaceh Shiro

参阅

标签:admin,用户,token,user,Apache,Shiro
From: https://www.cnblogs.com/liaozibo/p/apache-shiro.html

相关文章