在前面一节《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. 如何在 Xcode 中进行 Qt 开发(可使用使用 Homebrew 来安装qt)

    第一步 安装 Qt 分为两种情况: 1. 希望使用 Qt Quick 等先进Qt5技术, 2. 只需要 Qt 4.8的类库即可. 第一种, 直接去官网下载 Mac安装包, 在此不作过多说明, 开发时也 ...

  2. 关于Qt 5-MSVC 2015 64位在 win7 64位系统debug程序崩溃的问题

     关于Qt 5-MSVC 2015 64位在 win7 64位系统debug程序崩溃的问题 在win7 64位系统安装VC2015的编译器,并安装了 Qt 5.6 -5.7 VC2015 64位版本测 ...

  3. java多线程之生产者-消费者

    public class Product { private String lock; public Product(String lock) { this.lock = lock; } public ...

  4. 解决Mac下sed命令报错的问题

    在Mac上准备批量替换一些文字,使用sed命令,如下: sed -i 's/xxx/yyy/g' file 同样的命令在Linux上是可以成功运行的,注意Mac下man sed中-i参数的说明: 原来 ...

  5. [转]Android的taskAffinity

    Activity的归属,也就是Activity应该在哪个Task中,Activity与Task的吸附关系.我们知道,一般情况下在同一个应用中,启动的Activity都在同一个Task中,它们在该Tas ...

  6. 使用wireshark抓包分析-抓包实用技巧

    目录 使用wireshark抓包分析-抓包实用技巧 前言 自定义捕获条件 输入配置 输出配置 命令行抓包 抓取多个接口 抓包分析 批量分析 合并包 结论 参考文献 使用wireshark抓包分析-抓包 ...

  7. Confluence安装、汉化及jira整合

    今天上午装了一下Confluence,刚开始装的时候成功了,成功后进入数据库配置阶段,本人想把jira和confluence整合一起用,刚开始提示数据库连接问题,后来一直问题提示Connection ...

  8. 获取Spring中的Bean

    1.Utils工具类 package com.xxx.common.helper; import org.springframework.beans.BeansException; import or ...

  9. idea提交代码到自己git账号的master branch

    1.注册GitHub账号 2.创建本地密钥与远程仓库连接(使用idea的话,这第二步可能不是必须的,但是密钥我之前配置过.所以写下来) ①安装git 客户端sudo apt-get install g ...

  10. Jenkins与RocketChat集成

    Jenkins与RocketChat集成 在Jenkins中安装插件RocketChat Notifier 配置信息 点击Jenkins左侧的系统管理-->系统设置, 找到Global Rock ...