Shiro认证时的密码比对

在前面一节《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); 来计算加盐后的密码值。

时间: 2024-08-10 01:24:00

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

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

shiro介绍 什么是shiro shiro是Apache的一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权.加密.会话管理等功能,组成了一个通用的安全认证框架.它可以实现如下的功能: 1.验证用户 2.对用户执行访问控制,如:判断用户是否具有角色admin,判断用户是否拥有访问的资源权限. 3.在任何环境下使用SessionAPI.例如C/S程序 4.可以使用多个用户数据源.例如一个是Oracle数据库,另外一个是MySQL数据库. 5.单点登录(SSO)功能

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

认证就是验证用户身份的过程.在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法.最常见的"实体/凭证"组合便是"用户名/密码"组合. 一.Shiro认证过程 1.收集实体/凭据信息 Java代码   //Example using most common scenario of username/password pair: UsernamePasswordToken token = new Userna

shiro 认证问题

@RequestMapping("/login") public String login(@RequestParam("username") String username, @RequestParam("password") String password){ Subject currentUser = SecurityUtils.getSubject(); if (!currentUser.isAuthenticated()) { // 把

shiro认证-SSM

shiro认证-SSM pom <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId>

shiro验证时,当authenticationStrategy为AllSuccessfulStrategy时

shiro验证时,当authenticationStrategy为AllSuccessfulStrategy时,如果某一个验证出错,那么 PrincipalCollection principalCollection = subject.getPrincipals();获得principalCollection为空值. [main] #指定securityManager的authenticator实现 authenticator=org.apache.shiro.authc.pam.Modula

权限项目总结(三) shiro 认证

认证是shiro在使用过程中最开始的一个步骤,只有通过了认证才回有下面授权等操作.认证就是shiro获取当前 用户凭据并进行匹配的过程,最朴素的理解就是弄清楚当前用户的到底是谁的过程.这里也是针对在应用层面的总结,因为发现跟到shiro内部东西就很多了,容易迷失自己. 其实shiro认证过程简化的步骤非常简单 1.提交凭据 2.获取验证信息 3.验证凭据和验证信息是否一致 看一下详细的步骤 粗略的跟了一下shiro认证的流程,处理流程如下. 流程中省去了提交表单获取凭据的过程,也省去了在自定义r

Putty使用公钥认证时,报错:Disconnected: No supported authentication methods available(server sent:public key) 问题的解决

Putty使用公钥认证时,按照常规方法设置,一直报错:Disconnected: No supported authentication methods available (server sent:public key). 如截图: 找了半天没找到问题出在哪里,sshd的设置一切正常.这个做过多次居然也能错???? 最后发现原来是 ~/.ssh/authorized_keys 文件的内容有问题,putty生成的pub文件的格式如下: ---- BEGIN SSH2 PUBLIC KEY ---

【shiro】(4)---Shiro认证、授权案例讲解

Shiro认证.授权案例讲解 一.认证  1. 认证流程     2.用户密码已经加密.加盐的用户认证 (1)测试类 // 用户登陆和退出,这里我自定了一个realm(开发肯定需要自定义realm获取数据库密码和权限) @Test public void testCustomRealmMd5() { // 创建securityManager工厂,通过ini配置文件创建securityManager工厂 Factory<SecurityManager> factory = new IniSecu

shiro框架学习-2-springboot整合shiro及Shiro认证授权流程

1. 添加依赖 1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-web</artifactId> 4 </dependency> 5 <dependency> 6 <groupId>mysql</groupId> 7 <artifactId>mys