zoukankan      html  css  js  c++  java
  • apache Shiro权限框架

    Jfinal+Shiro+Jwt权限认证简单Demo

    1

    package kikyo;
    
    import org.apache.shiro.SecurityUtils;
    import org.apache.shiro.authc.*;
    import org.apache.shiro.config.IniSecurityManagerFactory;
    import org.apache.shiro.mgt.SecurityManager;
    import org.apache.shiro.subject.Subject;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class ShiroDemo {
        private static final Logger log = LoggerFactory.getLogger(ShiroDemo.class);
    
        public static void main(String[] args) {
            //1.创建SecurityManagerFactory
            IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
            //2.获取SecurityManager,绑定到SecurityUtils中
            SecurityManager securityManager = factory.getInstance();
            SecurityUtils.setSecurityManager(securityManager);
            //3.获取一个用户识别信息
            Subject currentUser = SecurityUtils.getSubject();
            //4.判断是否已经身份验证
            if (!currentUser.isAuthenticated()) {
                // 4.1把用户名和密码封装为 UsernamePasswordToken 对象
                UsernamePasswordToken token = new UsernamePasswordToken("guest", "guest");
                // 4.2设置rememberme
                token.setRememberMe(true);
                try {
                    // 4.3登录.
                    currentUser.login(token);
                } catch (UnknownAccountException uae) { //用户不存在异常
                    log.info("****---->用户名不存在: " + token.getPrincipal());
                    return;
                } catch (IncorrectCredentialsException ice) {// 密码不匹配异常
                    log.info("****---->" + token.getPrincipal() + " 的密码错误!");
                    return;
                } catch (LockedAccountException lae) {// 用户被锁定
                    log.info("****---->用户 " + token.getPrincipal() + " 已被锁定");
                } catch (AuthenticationException ae) { // 其他异常,认证异常的父类
                    log.info("****---->用户" + token.getPrincipal() + " 验证发生异常");
                }
            }
    
            // 5.权限测试:
            //5.1判断用户是否有某个角色
            if (currentUser.hasRole("guest")) {
                log.info("****---->用户拥有角色guest!");
            } else {
                log.info("****---->用户没有拥有角色guest");
                return;
            }
            //5.2判断用户是否执行某个操作的权限
            if (currentUser.isPermitted("see")) {
                log.info("****----> 用户拥有执行此功能的权限");
            } else {
                log.info("****---->用户没有拥有执行此功能的权限");
            }
    
            //6.退出
            System.out.println("****---->" + currentUser.isAuthenticated());
            currentUser.logout();
            System.out.println("****---->" + currentUser.isAuthenticated());
    
        }
    }
    

    pom

        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-core</artifactId>
                <version>1.3.2</version>
            </dependency>
            <!-- 这里有用到日志打印,所以引入 -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.6.1</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.15</version>
            </dependency>
        </dependencies>
    

    shiro.ini

    # -----------------------------------------------------------------------------
    # users用来定义用户
    [users]
    # 用户名 = 密码,角色1,角色2...
    admin = secret, admin
    guest = guest, guest
    aa = 123456, guest
    # -----------------------------------------------------------------------------
    # roles用来定义角色
    [roles]
    # 角色 = 权限 (* 代表所有权限)
    admin = *
    # 角色 = 权限 (* 代表所有权限)
    guest = see
    aa = see
    
  • 相关阅读:
    BZO4197 & 洛谷2150 & UOJ129:[NOI2015]寿司晚宴——题解
    BZOJ4198 & 洛谷2168 & UOJ130:[NOI2015]荷马史诗——题解
    BZOJ4651 & 洛谷1173 & UOJ220:[NOI2016]网格——题解(附debug数据)
    BZOJ4653 & 洛谷1712 & UOJ222:[NOI2016]区间——题解
    BZOJ4898 & BZOJ5367 & 洛谷3778:[APIO2017]商旅——题解
    BZOJ5340 & 洛谷4564 & LOJ2552:[CTSC2018]假面——题解
    举例分析 Makefile 中的 patsubst、wildcard、notdir 函数
    伪指令 ENTRY 与 END
    伪指令 ADR 与 LDR 的区别
    μC/OS-II 信号量集
  • 原文地址:https://www.cnblogs.com/kikyoqiang/p/13906909.html
Copyright © 2011-2022 走看看