Shiro的基础应用
第一步: 导入依赖
<!--Shiro核心类库-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
第二步:编写shiro配置文件shiro.ini(该文件放在resources文件夹下)
[users]
root=123456,admin
#test用户密码为000000 有test角色
test=000000,test
[roles]
#管理员拥有全部权限
admin=*
#test角色拥有部分权限
test=search,add,update
第三步:编写Shiro测试类
package com.day511.demoshiro.test;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
public class ShiroTest {
public static void main(String[] args) {
//1、创建SecurityManager对象:加载shiro.ini文件
IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
//2、通过对象,创建SecurityManager对象
SecurityManager securityManager = factory.getInstance();
//3、 将securityManager绑定到当前运行环境中,全局,只用设置一次:让系统可以随时随地访问securityManager对象
SecurityUtils.setSecurityManager(securityManager);
//4、创建当前登录的主体,与当前系统进行交互的对象,此时主体没有经过认证
Subject subject = SecurityUtils.getSubject();
//5、手机主体登录的身份/凭证 用户名 密 码 设置
//用于模拟登录场景,若用户名和密码与ini文件中的属性不符,就会报用户名或密码错误
UsernamePasswordToken token = new UsernamePasswordToken("test","000000");
//6、主体登陆
//登录是否验证过
//登录test
try {
subject.login(token);
if (subject.isAuthenticated()){
System.out.println("登陆成功");
//判断角色 hasRole判断单个角色 hasRoles判断多个角色
if (subject.hasRole("admin")){
System.out.println("有admin这个角色");
}else {
System.out.println("没有admin这个角色");
}
//判断是否拥有指定的权限 isPermitted判断单个权限 isPermittedAll判断多个权限,只要有一个不满足就直接是false
if (subject.isPermitted("add")){
System.out.println("有add权限");
}else {
System.out.println("没有add权限");
}
if (subject.isPermitted("del")){
System.out.println("有del权限");
}else {
System.out.println("没有del权限");
}
}
}catch (AuthenticationException e){
//e.printStackTrace();
System.out.println("用户名或密码错误,登陆失败");
}
}
}
运行结果: