Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。
其中 SecurityManager是核心,相当于Spring MVC的前端控制器,起管家调度作用。
Subject可以理解为账户。来验证其是否合法或者权限。
Realms可以理解为数据源,即程序从Realm中拿数据来确认该用户时候是合法,权限等。Realm可以自己实现,继承Realm即可。下面这个例子默认Realm的来源为ini配置文件,即zhang=123 wang =123.符合这两个即ok.
先不多说,看代码:
@Test//导入Junit包
public void testWorld() {
//1、获取SecurityManager工厂,此处使用Ini配置文件初始化SecurityManager
//shiro配置文件放在src/test/resource目录下,配置文件内容:
[users]
zhang=123
wang=123
Factory<org.apache.shiro.mgt.SecurityManager> factory =
new IniSecurityManagerFactory("classpath:shiro.ini");
//2、得到SecurityManager实例 并绑定给SecurityUtils
org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
//3、得到Subject及创建用户名/密码身份验证Token(即用户身份/凭证)
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123");
try {
//4、登录,即身份验证
subject.login(token);
} catch (AuthenticationException e) {
//5、身份验证失败
try {
throw new Exception("失败了");
} catch (Exception e1) {
e1.printStackTrace();
}
}
Assert.assertEquals(true, subject.isAuthenticated()); //断言用户已经登录
//6、退出
subject.logout();
}
jar包的引入:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
//这个包容易忘记
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.2</version>
</dependency>