shiro盐值加密并验证
在数据表中存的密码不应该是123456,而应该是123456加密之后的字符串,而且还要求这个加密算法是不可逆的,即由加密后的字符串不能反推回来原来的密码,如果能反推回来那这个加密是没有意义的。著名的加密算法,比如 MD5,SHA1。下面就来介绍如何用shiro进行MD5加密并验证
1.在注册的时候将前端传过来的密码入数据库之前进行加密
public void encryptPassword(User user) {
String salt = new SecureRandomNumberGenerator().nextBytes().toHex();
user.setSalt(salt);
String newPassword = new SimpleHash(
algorithmName,
user.getPassword(),
user.getSalt(),
hashIterations).toHex();
user.setPassword(newPassword);
}
2.在spring容器中自定义realm的配置加入HashedCredentialsMatcher,这样前端输入的密码进入realm就会自动进行加密了,此外还可以配置了加密次数等。
<bean id="myShiroRealm" class="com.wang.realm.MyShiroReaml">
<!-- businessManager 用来实现用户名密码的查询 -->
<property name="userService" ref="userService" />
<property name="permissionService" ref="permissionService" />
<!-- 如果不加入密码匹配的操作,密码就不会存在 -->
<!-- 加入了密码匹配器之后,就会默认将前台传递过来的密码自动MD5加密 -->
<property name="credentialsMatcher">
<bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
<!-- 加密的方式 -->
<constructor-arg index="0" type="java.lang.String" value="MD5" />
<!-- 加密的次数,默认是1次 -->
<property name="hashIterations" value="2"/>
</bean>
</property>
</bean>
3.这部分就是realm的验证部分了接收前端的参数,取出数据库中的对象,然后根据密码,盐值等进行解密,匹配等等,这部分shiro已经帮我们做好了。
// 认证方法
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { //验证账号密码
UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
User user = userService.findUserByName(token.getUsername());
if(user==null){
throw new UnknownAccountException();
}
if(Boolean.TRUE.equals(user.getLocked())) {
throw new LockedAccountException(); //帐号锁定
} ByteSource credentialsSalt = ByteSource.Util.bytes(user.getSalt());//这里的参数要给个唯一的; //最后的比对需要交给安全管理器
//三个参数进行初步的简单认证信息对象的包装
SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(
user.getUsername(), //用户名
user.getPassword(), //密码
credentialsSalt,
getName() //realm name
); return authenticationInfo;
}
shiro盐值加密并验证的更多相关文章
- shiro密码的比对,密码的MD5加密,MD5盐值加密,多个Relme
有具体问题的可以参考之前的关于shiro的博文,关于shiro的博文均是一次工程的内容 密码的比对 通过AuthenticatingRealm的CredentialsMatcher方法 密码的加密 ...
- SpringBoot整合shiro-MD5盐值加密
为什么要进行密码加密? 在我们的日常生活中,许多人有着在不同网站上使用相同密码的坏习惯(包括我也是qaq),假如应用程序或服务器出现漏洞,数据被窃取,用户的明文密码直接被暴露给黑客.显然后果将不堪设想 ...
- c# MD5及盐值加密
using System;using System.Collections.Generic;using System.Linq;using System.Security.Cryptography;u ...
- c# MD5盐值加密
using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptograph ...
- Spring Security中的MD5盐值加密
在 spring Security 文档中有这么一句话: "盐值的原理非常简单,就是先把密码和盐值指定的内容合并在一起,再使用md5对合并后的内容进行演算,这样一来,就算密码是一个很常见的字 ...
- MD5盐值加密
加密思路 思路解析:(数据解析过程基于16进制来处理的,加密后为16进制字符串) 加密阶段: 对一个字符串进行MD5加密,我们需要使用到MessageDigest(消息摘要对象),需要一个盐值(sal ...
- shiro 密码的MD5盐值加密
- Java和JS MD5加密-附盐值加密demo
JAVA和JS的MD5加密 经过测试:字母和数据好使,中文不好使. 源码如下: ** * 类MD5Util.java的实现描述: * */public class MD5Util { // 获得MD5 ...
- Shiro自定义realm实现密码验证及登录、密码加密注册、修改密码的验证
一:先从登录开始,直接看代码 @RequestMapping(value="dologin",method = {RequestMethod.GET, RequestMethod. ...
随机推荐
- MySQL基础之事务编程学习笔记
MySQL基础之事务编程学习笔记 在学习<MySQL技术内幕:SQL编程>一书,并做了笔记.本博客内容是自己学了<MySQL技术内幕:SQL编程>事务编程一章之后,根据自己的理 ...
- 自荐一个 element 表单代码生成器
Element UI 表单设计及代码生成器,可将生成的代码直接运行在基于 Element 的 vue 项目中. github仓库 https://github.com/JakHuang/form- ...
- $CH5104\ I-country$ 线性$DP$
CH Sol ”凸联通块“是什么意思呢? 其实就是图形的左端点先减小再增大,右端点先增大再减小 阶段 考虑到第k行,已经选了i个格子 状态 1.第i行的左端点与右端点 2.这一行的左端点相对于上一行的 ...
- Spring Security入门(基于SSM环境配置)
一.前期准备 配置SSM环境 二.不使用数据库进行权限控制 配置好SSM环境以后,配置SpringSecurity环境 添加security依赖 <dependency> <gr ...
- [quack] A browser extension to Clean website pages ADs
1. youdao.com result page Before: After: Later we will add more and more. Or you can submit issues t ...
- antDeaign-form-getFieldDecorator 使用注意事项
2020-01-06 antDeaign-form-getFieldDecorator 使用注意事项 一.使用getFieldDecorator之前,必须先使用 Form.create({ })(Fo ...
- OpenStack Identity API v3
Table Of Contents OpenStack Identity API v3 What’s New in Version 3.7 What’s New in Version 3.6 What ...
- 【转】推荐给初级Java程序员的3本进阶书
ImportNew 注: 原作者在这篇文章中介绍3本不错的技术书籍.作者认为这些书籍对新手或者学生而言尤其有帮助.通过一些基础性的教程入门后,我们可以使用Java做基础性的编程.然而,当我们需要从初级 ...
- No property andp found for type String! Traversed path: CmsPage.siteId.
Respository没有找到该参数 1)由该参数,函数名写错,不符合JPA规范 2)实体类没有该参数
- border-radius属性失效了Ծ‸Ծ
.btn-circle { width: 30px; height: 30px; text-align: center; padding: 4px ; font-size: 16px; font-we ...