• Shiro learning


    Shiro小案例

    在上篇Shiro入门学习中说到了Shiro可以完成认证,授权等流程。在学习认证流程之前,我们应该先入门一个Shiro小案例。

    创建一个java maven项目

     

    <?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>groupId</groupId>
        <artifactId>Shrio-login</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
    
            <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.2</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-core -->
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-core</artifactId>
                <version>1.3.2</version>
            </dependency>
    
    
            <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.25</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.25</version>
            </dependency>
    
    
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-nop</artifactId>
                <version>1.7.2</version>
            </dependency>
        </dependencies>
    
    </project>
    Pom.xml
    log4j.rootLogger = info,stdout,file
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH:mm:ss}][%C{1}:%L] - %m%n
    log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.file.file=C:\Users\amber.lei\Documents\Learning\Shiro\log\info(+).log
    
    log4j.appender.file.DatePattern= '.'yyyy-MM-dd
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH:mm:ss}][%C{1}:%L] - %m%n
    log4j.appender.file.Encoding=UTF-8
    log4j.properties

     LoginDemo.java

     1 package com.amber.login;
     2 
     3 import org.apache.shiro.SecurityUtils;
     4 import org.apache.shiro.authc.AuthenticationException;
     5 import org.apache.shiro.authc.UnknownAccountException;
     6 import org.apache.shiro.authc.UsernamePasswordToken;
     7 import org.apache.shiro.config.IniSecurityManagerFactory;
     8 import org.apache.shiro.mgt.SecurityManager;
     9 import org.apache.shiro.subject.Subject;
    10 import org.slf4j.Logger;
    11 import org.slf4j.LoggerFactory;
    12 
    13 /**
    14  * Shiro入门
    15  */
    16 public class LoginDemo {
    17     static Logger logger = LoggerFactory.getLogger(LoginDemo.class);
    18     public static void main(String[] args) {
    19 
    20         //1.获得SecurityManagerFactory
    21         IniSecurityManagerFactory iniSecurityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
    22         //2.通过工厂获得SecurityManager
    23         SecurityManager securityManager =  iniSecurityManagerFactory.getInstance();
    24         //3.把SecurityManger放置到运行环境中
    25         SecurityUtils.setSecurityManager(securityManager);
    26         try {
    27             //4.通过SecurityUtis获取subject
    28             Subject subject =  SecurityUtils.getSubject();
    29             UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("amber", "111111");//这里的amber 和 111111指用户输入的用户名和密码
    30             //登陆
    31             subject.login(usernamePasswordToken);
    32             //判断是否通过验证,true代表通过验证
    33             if (subject.isAuthenticated()) {
    34                 logger.info("login successful");
    35             }
    36             subject.logout();
    37         } catch (UnknownAccountException e) {
    38             logger.error("ERROR incorrect username or passwod", e);
    39         } catch (AuthenticationException e) {
    40             logger.error("login failed", e);
    41         }
    42     }
    43 }

    Shiro.ini

    [users]
    amber=111111

    [users]可以理解成一个用户组,里面有一个用户username:amber ,password:111111.当然在实际开发中,我们的用户名和密码都是从数据库中读取出来的。

    Shiro案例流程:

    • 通过shiro.ini文件获得到工厂,然后通过工厂获得SecurityManager.
    • 把SecuityManager交给SecuityUtils
    • 通过SecurityUtils获得到Subject对象
    • 把用户传入的用户名和密码,生成UsernamePasswordToken实例
    • 把token传给Subject.login(token),如果验证失败抛出异常
  • 相关阅读:
    091122杂记
    20100304我的碎碎念
    写给自己
    开始学习AGG
    找两个数组中的相同元素
    要多写代码了
    [翻译] AGG Reference 之 Basic Renderers(基础渲染器)
    在博客园日志中显示数学公式(旧,ASCIIMathML.js版说明)
    091128日志(博客园博客显示数学公式的方法!)
    与临时对象的斗争(上)
  • 原文地址:https://www.cnblogs.com/amberbar/p/10025974.html
Copyright © 2020-2023  润新知