权限管理与Shiro入门(十)

2023-10-06 09:22:28 浏览数 (1)

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); 
          }
}

0 人点赞