Shiro笔记---授权

1.搭建shiro环境(*)

  idea2018.2、maven3.5.4、jdk1.8

 项目结构:

  

  pom.xml:  

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.zyu</groupId>
    <artifactId>idea_shiro_demo03</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.2.4</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>
    </dependencies>

</project>

 

shiro_role_permission.ini 

[users]
superbird=123456,system  
bigbird=123,role1,role2

[roles]
system=InRoom:select,InRoom:insert,InRoom:xiaoFei,InRoom:update,VIP:select,VIP:gaunli,VIP:add
role1=InRoom:xiaoFei
role2=VIP:select,VIP:add

【users】

用户名=密码,角色

【roles】

角色=对应的权限

ShiroUtil(封装对应的身份验证方法  --- 只有先登录之后才能判断权限):

public class ShiroUtil {

    public static Subject login(String configPath,String username,String password) {
        //找资源:ctrl+shift+n
        //核心类:SecurityManager
        Factory<SecurityManager> factory = new IniSecurityManagerFactory(configPath);
        SecurityManager securityManager = factory.getInstance();
        //当前用户Subject
        SecurityUtils.setSecurityManager(securityManager);
        Subject user = SecurityUtils.getSubject();
        //模拟用户输入用户名与密码
        UsernamePasswordToken token = new UsernamePasswordToken(username,password);
        try {
            user.login(token);
            System.out.println("登录成功");
        } catch (AuthenticationException e) {
            System.out.println("登录失败");
        }
        return user;
    }
}

判断用户所拥有的角色(一个用户对应的角色可以是一个,也可以是多个)

public class ShiroDemo {

    public static void main(String[] args) {
        Subject user = ShiroUtil.login("classpath:shiro_role_permission.ini", "bigbird", "123");
        //判断用户是否拥有某个角色
        boolean flag1 = user.hasRole("system");
//         System.out.println("flag1="+flag1);
        List<String> roles = Arrays.asList("role1", "role2","system");
        boolean[] flags = user.hasRoles(roles);
        System.out.println(Arrays.toString(flags));
    }
}

判断用户是否拥有某个具体的权限

public class ShiroDemo01 {

    public static void main(String[] args) {
        //判断bigbird=123的用户是否具有某个具体的权限
        Subject user = ShiroUtil.login("classpath:shiro_role_permission.ini", "bigbird", "123");
        boolean flag1 = user.isPermitted("InRoom:xiaoFei");
        //System.out.println("flag1="+flag1);

        //判断某个用户是否同时具有多个权限
        boolean[] flags = user.isPermitted("InRoom:xiaoFei", "InRoom:update");
        // System.out.println("flags="+ Arrays.toString(flags));

        try {
            user.checkPermission("InRoom:xiaoFei");
            System.out.println("bigbird有消费记录权限");
        } catch (AuthorizationException e) {
            System.out.println("bigbird有没有消费记录权限");
        }
    }
}
原文地址:https://www.cnblogs.com/zyulike/p/9674769.html