4.3 应用程序使用Shiro
也就是说对于我们而言,最简单的一个Shiro应用:
1、应用代码通过Subject来进行认证和授权,而Subject又委托给SecurityManager;
2、我们需要给Shiro的SecurityManager注入Realm,从而让SecurityManager能得到合法的用户及其权限进行判断。
从以上也可以看出,Shiro不提供维护用户/权限,而是通过Realm让开发人员自己注入。
4.4 Shiro的入门
4.4.1 搭建基于ini的运行环境
(1)创建工程导入shiro坐标
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
4.4.1 用户认证
认证:身份认证/登录,验证用户是不是拥有相应的身份。基于shiro的认证,是通过subject的login方法完成用户
认证工作的
(1)在resource目录下创建shiro的ini配置文件构造模拟数据(shiro-auth.ini)
[users]
#模拟从数据库查询的用户
#数据格式 用户名=密码
zhangsan=123456
lisi=654321
(2)测试用户认证
@Test
public void testLogin() throws Exception{
//1.加载ini配置文件创建SecurityManager
Factory<SecurityManager> factory = new
IniSecurityManagerFactory("classpath:shiro.ini");
//2.获取securityManager
SecurityManager securityManager = factory.getInstance();
//3.将securityManager绑定到当前运行环境
SecurityUtils.setSecurityManager(securityManager);
//4.创建主体(此时的主体还为经过认证)
Subject subject = SecurityUtils.getSubject();
/**
* 模拟登录,和传统等不同的是需要使用主体进行登录
*/
//5.构造主体登录的凭证(即用户名/密码)
//第一个参数:登录用户名,第二个参数:登录密码
UsernamePasswordToken upToken = new UsernamePasswordToken("zhangsan","123456");
//6.主体登录
subject.login(upToken);
//7.验证是否登录成功
System.out.println("用户登录成功="+subject.isAuthenticated());
//8.登录成功获取数据
//getPrincipal 获取登录成功的安全数据
System.out.println(subject.getPrincipal());
}