• 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有没有消费记录权限");
            }
        }
    }
  • 相关阅读:
    《增长黑客》阅读内容摘要(前三章)
    ios的安全机制
    R语言  RStudio快捷键总结
    R in action 笔记(第二部分)
    R in action 笔记(第一部分)
    R统计函数-开源
    R语言函数索引-11月
    mysql join的优化实例
    android异步消息处理机制
    android ListView与EditText共存错位
  • 原文地址:https://www.cnblogs.com/zyulike/p/9674769.html
Copyright © 2020-2023  润新知