1. Shiro简介
· Shiro是一个强大且易用的Java安全框架。
· 可以帮助我们完成认证、授权、加密、会话管理、与 Web 集成、缓存等。
· 与Spring Security 相比,在于 Shiro 使用了比较简单易懂易于使用的授权方式。shiro属于轻量级框架,相对于security简单的多,也没有security那么复杂。
2. Shiro的整体架构
架构名称 | 描述 |
---|---|
Subject | 当前操作用户 |
Authenticator | 认证(登录、登出等) |
Authorizer | 授权 |
Session Manager | 会话管理器 |
Session DAO | session的操作,例如增删改查 |
Cache Manager | 缓存管理器 |
Cryptography | 加密 |
shiro三大核心组件
组建名称 | 作用 |
---|---|
Subject | 代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。 |
SecurityManager | 它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。 |
Realm | Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。 |
3.Shiro认证
Shiro认证的步骤如下:
Shiro认证小例子:
第一步. 创建SpringBoot项目
第二步. 在pom.xml添加Shiro与Spring整合的依赖
第三步. 编写一个简单的测试类,项目目类结构如下:
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.SimpleAccountRealm;
import org.apache.shiro.subject.Subject;
import org.junit.Before;
import org.junit.Test;
public class AuthenticationTest {
// 用来存储用户信息
SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();
@Before
public void addUser(){
// 添加用户
simpleAccountRealm.addAccount("olivia","123456");
}
@Test
public void testAuthentication(){
// 创建SecurityManager
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
// 设置SecurityManager环境下的Realm
defaultSecurityManager.setRealm(simpleAccountRealm );
// 主体提交认证请求
SecurityUtils.setSecurityManager(defaultSecurityManager);
// 得到Subject及创建用户名/密码身份验证Token(即用户身份/凭证)
Subject subject = SecurityUtils.getSubject();
// 通过UsernamePasswordToken组织提交认证所要传递的参数
UsernamePasswordToken token = new UsernamePasswordToken("olivia","123456");
// 提交登录认证
subject.login(token);
// 打印是否认证通过:subject.isAuthenticated()
System.out.println("认证:" + subject.isAuthenticated());
}
}
第四步. 运行