Shiro

屏幕截图 2021-09-24 111015

Shiro 不会去维护用户、维护权限

屏幕截图 2021-09-24 111210

身份验证

SecurityUtils.setSecurityManager(new IniSecurityManagerFactory("classpath:shiro.ini").getInstance());
Subject subject = SecurityUtils.getSubject();
var token = new UsernamePasswordToken("cxk", "123");
try {
    subject.login(token);
} catch (AuthenticationException e) {
    // 登录失败
    e.printStackTrace();
}
System.out.println(subject.isAuthenticated()); // true
subject.logout();
System.out.println(subject.isAuthenticated()); // false

认证流程

屏幕截图 2021-09-24 113925

Realm:Shiro 从从 Realm 获取安全数据(如用户、角色、权限)

实现org.apache.shiro.realm.Realm接口来自定义自己的用户认证流程

需要注意的是认证完成返回的AuthenticationInfo 这个对象代表用户的信息 权限。

Shiro 提供的 Realm:

屏幕截图 2021-09-24 114623

Authenticator 及 AuthenticationStrategy

授权

:表示资源/操作/实例的分割;,表示操作的分割;*表示任意资源/操作/实例

*可以匹配所有,不加*可以进行前缀匹配

角色权限判断

System.out.println(subject.hasRole("admin")); // true
System.out.println(subject.isPermitted("user:create")); // true
System.out.println(subject.isPermitted("user:delete")); // false
subject.checkPermission("user:*"); // 失败抛异常

授权流程

屏幕截图 2021-09-26 162705