4.4.2 用户授权
授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限
(1)在resource目录下创建shiro的ini配置文件构造模拟数据(shiro-prem.ini)
代码语言:javascript复制[users]
#模拟从数据库查询的用户
#数据格式 用户名=密码,角色1,角色2..
zhangsan=123456,role1,role2
lisi=654321,role2
[roles]
#模拟从数据库查询的角色和权限列表
#数据格式 角色名=权限1,权限2
role1=user:save,user:update
role2=user:update,user.delete
role3=user.find
(2)完成用户授权
代码语言:javascript复制import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.junit.Test;
public class ShiroTest1 {
@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("lisi","654321");
//6.主体登录
subject.login(upToken);
//7.用户认证成功之后才可以完成授权工作
boolean hasPerm = subject.isPermitted("user:save");
System.out.println("用户是否具有save权限=" hasPerm);
}
}