Shiro简介:
Realms: Realms担当Shiro和应用程序的安全数据之间的“桥梁”或“连接器”。从本质来讲,Realm是一个特定安全的DAO,Realm中封装了数据操作的模块和用户自定义的认证匹配过程。SecurityManager可能配置多个Realms,但至少要有一个
像Authenticator 获取认证数据的时候是通过 Realms 从LDAP或其他数据库获得认证数据的。
像Authorizer 获得权限数据 都市通过 Realms 获得权限数据的
shiro认证过程: 主体Subject提认证交请求到 Secuity Manager ,Secuity Manager 调用 Authenticator,Authenticator 通过Reals从数据库中
获取认证数据,从数据库中获取的认证数据与我们主体subject提交数据进行比对
package com.xiangshuai.test;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.SimpleAccountRealm;
import org.junit.Before;
import org.junit.Test;
/**
* @author lqx
@create 2019-03-02 21:02
pom.xml需引入的JAR抱如下
* <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
</dependency>
shiro核心包
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency>
</dependencies>
* * 所在位置:E:\学习文档子目录压缩\框架\spring\spring小技巧\spring管理数据库连接池完成 JdbcTemplate crud 及使用spirng提供的 test类--spring环境下
* E:\学习文档子目录压缩\框架\spring\简单模拟spring IOC底层实现原理
或 我的网盘/我的笔记/学习文档子目录压缩/框架/spring/spring小技巧/spring管理数据库连接池完成 JdbcTemplate crud 及使用spirng提供的 test类--spring环境下
*/
public class AuthenticatorTest {
private SimpleAccountRealm simpleAccountRealm=new SimpleAccountRealm();
@Before
public void before(){
simpleAccountRealm.addAccount("小红","123");//增加个用户,方便和subject到时候进行比对
}
@Test
public void testAuthenticatorTest(){
//创建SecurityManger环境,手动添加个Reals到创建SecurityManger环境中
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
defaultSecurityManager.setRealm(simpleAccountRealm);
//主体Subject主动提交认证请求
SecurityUtils.setSecurityManager(defaultSecurityManager);
Subject subject = SecurityUtils.getSubject();
// 给subject主体里面加 登录token
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("小红","123");
subject.login(usernamePasswordToken);
//Reals 对subject和数据库(这里事模拟的)进行比对,看是否能通过验证 --true
System.out.println("subject是否通过认证:"+subject.isAuthenticated());
//Subject登出
subject.logout();
//Reals 对subject和数据库(这里事模拟的)进行比对,看是否能通过验证 --false
System.out.println("subject是否通过认证:"+subject.isAuthenticated());
}
}