zoukankan      html  css  js  c++  java
  • Shiro 入门

    1. 基础

    1.1 创建 Maven 项目

    Mavenpom.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>com.nwgdk</groupId>
        <artifactId>shiro-test-javase</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
    
            <!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-all -->
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-all</artifactId>
                <version>1.3.2</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/log4j/log4j -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.6.1</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.6.1</version>
                <!--<scope>test</scope>-->
            </dependency>
    
        </dependencies>
    
    </project>
    

    1.2 shiro 认证流程

    log4j.properties配置文件

    log4j.rootLogger=INFO, stdout
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m %n
    
    # General Apache libraries
    log4j.logger.org.apache=WARN
    
    # Spring
    log4j.logger.org.springframework=WARN
    
    # Default Shiro logging
    log4j.logger.org.apache.shiro=INFO
    
    # Disable verbose logging
    log4j.logger.org.apache.shiro.util.ThreadContext=WARN
    log4j.logger.org.apache.shiro.cache.ehcache.EhCache=WARN
    

    shiro.ini配置文件

    # -----------------------------------------------------------------------------
    # Users and their assigned roles
    #
    # Each line conforms to the format defined in the
    # org.apache.shiro.realm.text.TextConfigurationRealm#setUserDefinitions JavaDoc
    # -----------------------------------------------------------------------------
    [users]
    # user 'root' with password 'secret' and the 'admin' role
    root = secret, admin
    # user 'guest' with the password 'guest' and the 'guest' role
    guest = guest, guest
    # user 'presidentskroob' with password '12345' ("That's the same combination on
    # my luggage!!!" ;)), and role 'president'
    presidentskroob = 12345, president
    # user 'darkhelmet' with password 'ludicrousspeed' and roles 'darklord' and 'schwartz'
    darkhelmet = ludicrousspeed, darklord, schwartz
    # user 'lonestarr' with password 'vespa' and roles 'goodguy' and 'schwartz'
    lonestarr = vespa, goodguy, schwartz
    
    # -----------------------------------------------------------------------------
    # Roles with assigned permissions
    # 
    # Each line conforms to the format defined in the
    # org.apache.shiro.realm.text.TextConfigurationRealm#setRoleDefinitions JavaDoc
    # -----------------------------------------------------------------------------
    [roles]
    # 'admin' role has all permissions, indicated by the wildcard '*'
    admin = *
    # The 'schwartz' role can do anything (*) with any lightsaber:
    schwartz = lightsaber:*
    # The 'goodguy' role is allowed to 'drive' (action) the winnebago (type) with
    # license plate 'eagle5' (instance specific id)
    goodguy = winnebago:drive:eagle5
    
    
    package com.shiro.bean;
    
    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;
    
    public class HelloWorld {
    
        private static final Logger log = LoggerFactory.getLogger(HelloWorld.class);
    
        public static void main(String[] args) {
            log.info("正在测试输出Log4j...");
    
            // 1. 获取安全管理器
            Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
            SecurityManager securityManager = factory.getInstance();
            // 2. 设置安全管理器
            SecurityUtils.setSecurityManager(securityManager);
            // 3. 获取 Subject 对象
            Subject currentUser = SecurityUtils.getSubject();
            Session session = currentUser.getSession();
    
            session.setAttribute("name", "nwgdk");
            String value = (String) session.getAttribute("name");
            if (value != null) {
                log.info("Shiro 已经帮我们获得 session 中的指定值:" + value);
            }
    
            /* 认证登录流程
             * false : 代表没有登录
             */
            if (currentUser.isAuthenticated() == false) {
                // UsernamePasswordToken : 提供认证信息
                UsernamePasswordToken token = new UsernamePasswordToken("root", "secret");
                token.setRememberMe(true);
    
                try {
                    // 开始登陆
                    currentUser.login(token);
                    log.info("用户名和密码正确,登录成功!");
                } catch (UnknownAccountException e) {
                    log.info("账户不存在!");
                } catch (IncorrectCredentialsException e) {
                    log.info("密码错误!");
                } catch (LockedAccountException e) {
                    log.info("用户已锁定!");
                } catch (AuthenticationException e) {
                    log.info("认证异常!");
                }
            }
    
            // 判断当前用户是否拥有指定的角色
            if (currentUser.hasRole("admin") == true) {
                log.info("拥有指定的角色");
            } else {
                log.info("不拥有指定的角色");
            }
    
            // 判断当前用户是否拥有指定的权限
            if (currentUser.isPermitted("winnebago:drive:eagle5") == true) {
                log.info("用户拥有指定的权限");
            } else {
                log.info("用户不拥有指定的权限");
            }
        }
    }
    
  • 相关阅读:
    MySQL(2)---Explain
    MySQL(1)---索引
    php 的 PHPExcel1.8.0 使用教程
    通过html5 的EventSource来进行数据推送
    centos6.6 下 安装 php7 按 nginx方式
    IIS PHP Warning: Unknown: open(c:\php\tmp\sess_xxx, O_RDWR) failed: Permission denied (13) in Unknown on line 0
    动态加载JS,并执行回调函数
    nginx 504 gateway time out
    php 账号不能同时登陆,当其它地方登陆时,当前账号失效
    php 函数中静态变量的问题
  • 原文地址:https://www.cnblogs.com/nwgdk/p/9764164.html
Copyright © 2011-2022 走看看