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是同一个对象
以上内容是我的个人理解,如有误,欢迎大家指正讨论,谢谢
Shiro入门学习之shi.ini实现认证及源码分析(二)的更多相关文章
- Shiro入门学习之shi.ini实现授权(三)
一.Shiro授权 前提:需要认证通过才会有授权一说 1.授权过程 2.相关方法说明 ①subject.hasRole("role1"):判断是否有该角色 ②subject.has ...
- Django-restframework 源码之认证组件源码分析
Django-restframework 源码之认证组件源码分析 一 前言 之前在 Django-restframework 的流程分析博客中,把最重要的关于认证.权限和频率的方法找到了.该方法是 A ...
- 并发编程学习笔记(9)----AQS的共享模式源码分析及CountDownLatch使用及原理
1. AQS共享模式 前面已经说过了AQS的原理及独享模式的源码分析,今天就来学习共享模式下的AQS的几个接口的源码. 首先还是从顶级接口acquireShared()方法入手: public fin ...
- 并发编程学习笔记(8)----ThreadLocal的使用及源码分析
1. ThreadLocal的理解 ThreadLocal,顾名思义,就是线程的本地变量,ThreadLocal会为每个线程创建一个本地变量副本,使得使用ThreadLocal管理的变量在多线程的环境 ...
- Shiro入门学习---使用自定义Realm完成认证|练气中期
写在前面 在上一篇文章<shiro认证流程源码分析--练气初期>当中,我们简单分析了一下shiro的认证流程.不难发现,如果我们需要使用其他数据源的信息完成认证操作,我们需要自定义Real ...
- 【RabbitMQ学习记录】- 消息队列存储机制源码分析
本文来自 网易云社区 . RabbitMQ在金融系统,OpenStack内部组件通信和通信领域应用广泛,它部署简单,管理界面内容丰富使用十分方便.笔者最近在研究RabbitMQ部署运维和代码架构,本篇 ...
- Django rest framework 的认证流程(源码分析)
一.基本流程举例: urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^users/', views.HostView.as_view() ...
- Django REST framework —— 认证组件源码分析
我在前面的博客里已经讲过了,我们一般编写API的时候用的方式 class CoursesView(ViewSetMixin,APIView): pass 这种方式的有点是,灵活性比较大,可以根据自己的 ...
- Spring Securtiy 认证流程(源码分析)
当用 Spring Security 框架进行认证时,你可能会遇到这样的问题: 你输入的用户名或密码不管是空还是错误,它的错误信息都是 Bad credentials. 那么如果你想根据不同的情况给出 ...
随机推荐
- 跨站跟踪攻击(CST/XST)
XSS与httponly 正常情况下,客户端脚本(如JS脚本)是可以通过document.cookie函数获得,这样如果有XSS跨站漏洞,cookie很容易被盗取.浏览器有一个安全策略,通过设置coo ...
- vue插槽(slot)的模板与JSX写法
vue官网API: 插槽:https://cn.vuejs.org/v2/guide/components-slots.html JSX:https://cn.vuejs.org/v2/guide/r ...
- 本地cmd连接远程mysql数据库
一.登录远程mysql 输入mysql -h要远程的IP地址 -u设置的MySQL用户名 -p登录用户密码 例如:mysql -h 192.168.1.139 -u root -p dorlocald ...
- js获取当前时间:yyyy-MM-dd HH:MM:SS
var nowDate = new Date();var year = nowDate.getFullYear(); < ? ; ? " + nowDate.getDate() : n ...
- 格式化输出_python
一.直接使用 +a='chen'b='xiao'c='zan'print(a+b+c) 二.利用占位符 %%s:占位符:%d:整数:%x:十六进制:%f:浮点数(默认6位小数)特别注意浮点数: 指定长 ...
- 阻塞队列BlockingQueue之LinkedBlokingQueue
1.简介 LinkedBlokingQueue 是链表实现的有界阻塞队列,此队列的默认和最大长度为 Integer.MAX_VALUE.此队列按照先进先出的原则对元素进行排序.ArrayList和Ar ...
- Docker - ubuntu 镜像安装网络工具
概述 给 ubuntu 镜像, 安装一些基本的网络工具 背景 尝试学习的时候, 需要检测网络的连通性 没有这些工具, 绕了不少弯路 工具们 ping ip a 环境 docker 18.09 ubun ...
- 题解 P1453 【城市环路】
P1453 城市环路 感觉基环树(or环套树)的题目一般都是找到树上的环,断掉一条边再进行树上的操作(如noip2018P5022 旅行) 双倍经验:P2607 [ZJOI2008]骑士 P1453和 ...
- 网站调用qq第三方登录
1. 准备工作 (1) 接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权. ① 注册QQ互联开发者账号 网址 https:/ ...
- CTF_论剑场 头像
首先打开链接发现这个链接是一个头像 然后下载这个头像 通过hxd分析一下 在编辑中查找 flag 然后发现flag是一个用base64 加密的一串文字 然后我们将这串文字 解密 然后再通过md5 32 ...