在前面一节《Shiro在Web环境下集成Spring的大致工作流程》的最后一步中提到由Shiro完整密码比对。

那么具体是怎么工作的?

1,既然shiro会把密码来进行比对,当然会调用 UserNamePasswordkToken 中的 getPassword() 方法了。在该方法中打上断点,往前跟踪一下即可。
     

2,开启debug模式,跟踪发现 org.apache.shiro.authc.credential.SimpleCredentialsMatcher 类进行密码的比对
     

3,继续跟踪,发现我们自定义Realm的父类方法调用了 CrendebtialsMatcher组件 进行密码比对
     

CrendentialsMatcher组件(凭证匹配器)作用
     1,用来进行密码比对。
     2,用来对密码进行加密。
     3,shiro提供了该组件接口的很多实现类,用于不同类型的密码加密。
          常用的加密实现类为:HashedCrendentialsMatcher
     4,替换当前 Realm 的 crendentialsMatcher 属性,直接使用 HasedCrendentialsMatcher 对象,并设置加密算法即可。
 
结论:
     ①通过 AuthenticatingRealm 的 CrendentialsMatcher 属性来进行的密码的比对
     ②指定具体的 CrendentialsMatcher 接口的实现类来设置加密算法,盐值和循环加密次数
     ③如果两个用户拥有相同的原始密码,那么加密后的数据也是一样的,这还是有点安全隐患的,所以盐值最好设置为一个用户的唯一值(一般采用用户名)。
     ④在自定义Realm的认证方法(doAuthenticationInfo方法),返回的SimpeAuthenticationInfo对象时,需要采用带有ByteSource参数的构造函数来构建对象。
          ByteSource对象可以采用ByteSource.Util.byte(String UserID)获取;
     ⑤使用 new SimpleHash(hashAlgorithmName,salt,hashIterations); 来计算加盐后的密码值。

Shiro认证时的密码比对的更多相关文章

  1. Apache Shiro 使用手册(二)Shiro 认证

    认证就是验证用户身份的过程.在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法.最常见的"实体/凭证"组合便是&quo ...

  2. Apache Shiro 认证过程

    3.1.1    示例 Shiro验证Subjects 的过程中,可以分解成三个不同的步骤: 1. 收集Subjects 提交的Principals(身份)和Credentials(凭证): 2. 提 ...

  3. 无状态shiro认证组件(禁用默认session)

    准备内容 简单的shiro无状态认证 无状态认证拦截器 import com.hjzgg.stateless.shiroSimpleWeb.Constants; import com.hjzgg.st ...

  4. 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

    原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...

  5. frame shiro 认证示例及原理简述

    shiro 认证流程 1.创建一个 javaSE 的maven项目(quickstart),并添加依赖 <dependency> <groupId>junit</grou ...

  6. Shiro认证的另一种方式

    今天在学习shiro的时候使用另一种shiro验证的方式. 总体的思路是: (1)先在自己的方法中进行身份的验证以及给出提示信息.(前提是将自己的验证方法设为匿名可访问) (2)当验证成功之后到Shi ...

  7. 将 Shiro 作为应用的权限基础 二:shiro 认证

    认证就是验证用户身份的过程.在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法.最常见的“实体/凭证”组合便是“用户名/密码”组合. 一. ...

  8. springmvc+shiro认证框架配置

    1,在web.xml中配置fiter,如下所示 <!-- shiro的filter --> <!-- shiro过虑器,DelegatingFilterProxy通过代理模式将spr ...

  9. Apache Shiro 使用手册(二)Shiro 认证(转发:http://kdboy.iteye.com/blog/1154652)

    认证就是验证用户身份的过程.在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法.最常见的“实体/凭证”组合便是“用户名/密码”组合. 一. ...

随机推荐

  1. hMailServer搭建简单邮件系统

    本文介绍的是搭建本地的邮件系统,至于互联网的还在研究之中. 1.需要一个邮件服务器软件,这里用的是hMailServer,其中会让你设置一个密码,记住这个密码,后面连接的时候回用到. 2.添加域名 因 ...

  2. Attention is all you need及其在TTS中的应用Close to Human Quality TTS with Transformer和BERT

    论文地址:Attention is you need 序列编码 深度学习做NLP的方法,基本都是先将句子分词,然后每个词转化为对应的的词向量序列,每个句子都对应的是一个矩阵\(X=(x_1,x_2,. ...

  3. QT5 屏幕旋转90度

    主要思路是将所有项目界面加载到QGraphicsScene,再进行旋转操作.直接上代码#include <QApplication>#include <QGraphicsView&g ...

  4. SpringMVC使用MultipartFile文件上传,多文件上传,带参数上传

    一.配置SpringMVC 二.单文件与多文件上传 三.多文件上传 四.带参数上传 一.配置SpringMVC 在spring.xml中配置: <!-- springmvc文件上传需要配置的节点 ...

  5. 线程天敌TerminateThread与SuspendThread

    线程天敌TerminateThread与SuspendThread 作者:童磊(magictong) 目的:不是演示TerminateThread和SuspendThread的原理而是希望能在自己的程 ...

  6. notepadd++正则表达式大小写转换

    示例1:将语句 test this sentence 转为大写 查找:^.*$ 替换:\U$0 或------------ 查找:^(.*)$ 替换:\U\1 或 \U$1 示例2:将语句 TEST ...

  7. JDK JRE JVM 分别是什么

    JDK: Java Development Kit Java 开发工具包 JRE: Java Runtime Enviroment Java 运行时环境 JVM: Java Virtual Machi ...

  8. HBase 学习之路(十一)—— Spring/Spring Boot + Mybatis + Phoenix 整合

    一.前言 使用Spring+Mybatis操作Phoenix和操作其他的关系型数据库(如Mysql,Oracle)在配置上是基本相同的,下面会分别给出Spring/Spring Boot 整合步骤,完 ...

  9. 如何成长为一名合格的web架构师?

    写代码要经历下面几个阶段.  一 .你必须学习面向对象的基础知识,如果连这个都忘了,那你的编程之路注定是在做原始初级的重复! 很多程序员都知道类.方法.抽象类.接口等概念,但是为什么要面向对象,好处在 ...

  10. 监控redis的操作命令

    查看redis客户端的操作记录,即~/.rediscli_history. ls /home/*/.rediscli* 但是看不到代码操作redis的记录,只是redis-cli的记录.可以用moni ...