zoukankan      html  css  js  c++  java
  • Shiro入门学习之shi.ini实现认证及源码分析(二)

    一、Shiro.ini文件

    1.文件说明

    ①ini(InitializationFile)初始文件:Window系统文件扩展名

    ②Shiro使用时可以连接数据库,也可以不连接数据库(可以使用shiro.ini配置静态数据)

    2.shiro文件组成部分

    ①[main]:定义全局变量(内置securityManager对象)

     

     ②[users]定义用户名和密码

     ③[roles]定义角色

     ④[urls]定义哪些内置的urls生效,在web应用时使用

     

     二、Shiro实现认证+Shiro.ini

    1.认证过程

    学习任何一门新的技术,都是从官网找到get started:http://shiro.apache.org/tutorial.html,My First Shiro Application官网步骤精简版如下:

    2.新建module,添加pom依赖

     <properties>
            <shiro.version>1.4.1</shiro.version>
            <logging.version>1.2</logging.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-core</artifactId>
                <version>${shiro.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>${logging.version}</version>
            </dependency>
        </dependencies>

    3.resources下新建shiro.ini配置文件并添加如下配置

     

     4.新建test类

       至此、初步实现了结合shiro.ini实现认证过程,下面我分析总结一下

    三、源码分析

    1、Factory工厂是一个接口,通过查看类结构,看出实现类:IniSecurityFactory(虽然过时不维护,但可用)

     2、Subject.login()登录方法,参数也为接口,查看源码类结构,只有唯一实现类:UsernamePasswordToken,只需new该实现类即可

     3、当前线程内,多次获取Subject,都是同一个对象

      什么意思?我们测试一下:

     在当前线程内,多次从SecurityManager中获取Subject对象,都是同一个对象,底层又是怎么实现的呢?再看一下源码:

    ①SecurityUtils.getSubject()方法底层做了一些什么?

      从线程上下文中获取Subject,如果为null,建造一个subject并bind到线程上下文

     

    ②再看一下ThreadContext.bind(subject)源码

     ③再看一下put方法做了什么?

     ④重点来了:resources是什么?ThreadLocal!这下问题就解开了,线程局部变量

     

     四、总结

    1、Factory是一个接口,new是其实现类:IniSecurityManagerFactory

    2、Subject.login(参数),参数也是AuthenticationToken接口,new的是其唯一实现类,UsernamePasswordToken

    3、线程局部变量,每个线程之间的subject是不同对象,线程内subject是同一个对象

      以上内容是我的个人理解,如有误,欢迎大家指正讨论,谢谢

  • 相关阅读:
    cocos2d-x 3.0rc1 编译cpp-testsproject
    [wxWidgets]_[0基础]_[不常见但有用的类wxStandardPaths]
    教你摆脱低级程序猿 项目中cocopads的安装使用
    Android使用代码模拟HOME键的功能
    UVA 1508
    asp.net mvc5 安装
    Java_并发线程_Semaphore、CountDownLatch、CyclicBarrier、Exchanger
    crm操作产品实体
    BZOJ 3172 [Tjoi2013]单词 AC自己主动机(fail树)
    ADO与ADO.Net
  • 原文地址:https://www.cnblogs.com/rmxd/p/11756982.html
Copyright © 2011-2022 走看看