• Shiro 学习


    参考 Shiro入门教程

    1、pom

            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-core</artifactId>
                <version>1.2.3</version>
            </dependency>
    
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-simple</artifactId>
                <version>1.6.1</version>
            </dependency>
    

    2、shiro.ini

    # -----------------------------------------------------------------------------
    # Users and their (optional) assigned roles
    # username = password, role1, role2, ..., roleN
    # -----------------------------------------------------------------------------
    [users]
    root = secret, admin
    guest = guest, guest
    presidentskroob = 12345, president
    darkhelmet = ludicrousspeed, darklord, schwartz
    aihe = aihe, goodguy, client
    
    # -----------------------------------------------------------------------------
    # Roles with assigned permissions
    # roleName = perm1, perm2, ..., permN
    # -----------------------------------------------------------------------------
    [roles]
    admin = *
    client = look:*
    goodguy = winnebago:drive:eagle5
    

    Tutorial

    package com.test;
    
    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.session.Session;
    import org.apache.shiro.subject.Subject;
    import org.apache.shiro.util.Factory;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * Created by aihe on 2017/6/14.
     */
    public class Tutorial {
    
        private static final transient Logger log = LoggerFactory.getLogger(Tutorial.class);
    
        public static void main(String[] args) {
            log.info("My First Apache Shiro Application");
    
            //1. 这里的SecurityManager是org.apache.shiro.mgt.SecurityManager,而不是java.lang.SecurityManager
            // 加载配置文件
            Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
    
            //2.解析配置文件,并且返回一些SecurityManger实例
            SecurityManager securityManager = factory.getInstance();
    
            //3.设置SecurityManager到静态内存区,单例模式
            SecurityUtils.setSecurityManager(securityManager);
    
    
            // 安全操作
            Subject currentUser = SecurityUtils.getSubject();
    
            // 在应用的当前会话中设置属性
            Session session = currentUser.getSession();
            session.setAttribute("key", "value");
    
            //当前我们的用户是匿名的用户,我们尝试进行登录,
            if (!currentUser.isAuthenticated()) {
                UsernamePasswordToken token = new UsernamePasswordToken("aihe", "aihe");
    
                //this is all you have to do to support 'remember me' (no config - built in!):
                token.setRememberMe(true);
    
                //尝试进行登录用户,如果登录失败了,我们进行一些处理
    
                try {
                    currentUser.login(token);
    
                    //当我们获登录用户之后
                    log.info("User [" + currentUser.getPrincipal() + "] logged in successfully.");
    
    
                    // 查看用户是否有指定的角色
                    if (currentUser.hasRole("client")) {
                        log.info("Look is in your role");
                    } else {
                        log.info(".....");
                    }
    
                    // 查看用户是否有某个权限
                    if (currentUser.isPermitted("look:desk")) {
                        log.info("You can look.  Use it wisely.");
                    } else {
                        log.info("Sorry, you can't look.");
                    }
    
                    if (currentUser.isPermitted("winnebago:drive:eagle5")) {
                        log.info("You are permitted to 'drive' the 'winnebago' with license plate (id) 'eagle5'.  " +
                                "Here are the keys - have fun!");
                    } else {
                        log.info("Sorry, you aren't allowed to drive the 'eagle5' winnebago!");
                    }
    
                    //登出
    
                    currentUser.logout();
    
                } catch (UnknownAccountException uae) {
                    //账户不存在的操作
                } catch (IncorrectCredentialsException ice) {
                    //密码不正确
                } catch (LockedAccountException lae) {
                    //用户被锁定了
                } catch (AuthenticationException ae) {
                    //无法判断的情形
                }
    
            }
    
    
            System.exit(0);
        }
    }
    
  • 相关阅读:
    多线程的同步锁和死锁
    多线程同步
    oracle11g导出表时会发现少表,空表导不出解决方案
    GET和POST两种基本请求方法的区别
    数据库优化
    JavaScript中的基本数据类型
    Spring Data Jpa简单了解
    单例和多例详解
    jsp九大内置对象
    JavaEE 前后端分离以及优缺点
  • 原文地址:https://www.cnblogs.com/kikyoqiang/p/14501795.html
Copyright © 2020-2023  润新知