学习Spring Boot:(十四)spring-shiro的密码加密
前言
前面配置了怎么使用 shiro ,这次研究下怎么使用spring shiro的密码加密,并且需要在新增、更新用户的时候,实现生成盐,加密后的密码进行入库操作。
正文
配置凭证匹配器
@Beanpublic HashedCredentialsMatcher hashedCredentialsMatcher() {HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();hashedCredentialsMatcher.setHashAlgorithmName("SHA-256");//散列算法:MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512等。hashedCredentialsMatcher.setHashIterations(1);//散列的次数,默认1次, 设置两次相当于 md5(md5(""));return hashedCredentialsMatcher;}/*** 注册身份验证* @param hashedCredentialsMatcher 凭证匹配器* @return*/@Beanpublic OAuth2Realm oAuth2Realm(HashedCredentialsMatcher hashedCredentialsMatcher) {OAuth2Realm oAuth2Realm = new OAuth2Realm();oAuth2Realm.setCredentialsMatcher(hashedCredentialsMatcher);return oAuth2Realm;}
这样就把凭证匹配器注册到身份验证的 Realm 中,在用户进行登陆操作的时候,在 Realm 中的 doGetAuthenticationInfo
方法中使用这种方法进行用户身份认证:
return new SimpleAuthenticationInfo(user, // 存入凭证的信息,登陆成功后可以使用 SecurityUtils.getSubject().getPrincipal();在任何地方使用它user.getPassword(),ByteSource.Util.bytes(user.getSalt()), // 加盐,getName());
生成加密密码
/*** 随机生成 salt 需要指定 它的字符串的长度** @param len 字符串的长度* @return salt*/public static String generateSalt(int len) {//一个Byte占两个字节int byteLen = len >> 1;SecureRandomNumberGenerator secureRandom = new SecureRandomNumberGenerator();return secureRandom.nextBytes(byteLen).toHex();}/*** 获取加密后的密码,使用默认hash迭代的次数 1 次** @param hashAlgorithm hash算法名称 MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512、etc。* @param password 需要加密的密码* @param salt 盐* @return 加密后的密码*/public static String encryptPassword(String hashAlgorithm, String password, String salt) {return encryptPassword(hashAlgorithm, password, salt, 1);}/*** 获取加密后的密码,需要指定 hash迭代的次数** @param hashAlgorithm hash算法名称 MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512、etc。* @param password 需要加密的密码* @param salt 盐* @param hashIterations hash迭代的次数* @return 加密后的密码*/public static String encryptPassword(String hashAlgorithm, String password, String salt, int hashIterations) {SimpleHash hash = new SimpleHash(hashAlgorithm, password, salt, hashIterations);return hash.toString();}
然后将生成出来的盐,加密密码插入到数据库就完成了。
@Overridepublic void save(SysUserEntity sysUser) {sysUser.setCreateDate(new Date());// 密码加密 方式很多,任选/* String salt = RandomStringUtils.randomAlphanumeric(20);sysUser.setPassword(new Sha256Hash(sysUser.getPassword(), salt).toHex());*/String salt = ShiroUtils.generateSalt(20);sysUser.setPassword(ShiroUtils.encryptPassword("SHA-256", sysUser.getPassword(), salt));sysUser.setSalt(salt);sysUser.setUsername(sysUser.getEmail());sysUser.setStatus(SysConstant.SysUserStatus.ACTIVE);sysUser.setType(SysConstant.SysUserType.USER);sysUserDao.save(sysUser);}
学习Spring Boot:(十四)spring-shiro的密码加密相关推荐
- Spring Boot(十四):spring boot整合shiro-登录认证和权限管理
Spring Boot(十四):spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉 ...
- (转)Spring Boot (十四): Spring Boot 整合 Shiro-登录认证和权限管理
http://www.ityouknow.com/springboot/2017/06/26/spring-boot-shiro.html 这篇文章我们来学习如何使用 Spring Boot 集成 A ...
- Spring Boot系列四 Spring @Value 属性注入使用总结一
@Value注入 不通过配置文件的注入属性的情况 通过@Value将外部的值动态注入到Bean中,使用的情况有: 注入普通字符串 注入操作系统属性 注入表达式结果 注入其他Bean属性:注入beanI ...
- spring boot(十五)spring boot+thymeleaf+jpa增删改查示例
快速上手 配置文件 pom包配置 pom包里面添加jpa和thymeleaf的相关包引用 <dependency><groupId>org.springframework.bo ...
- Spring Security技术栈学习笔记(十四)使用Spring Social集成QQ登录验证方式
上一篇文章<Spring Security技术栈开发企业级认证与授权(十三)Spring Social集成第三方登录验证开发流程介绍>主要是介绍了OAuth2协议的基本内容以及Spring ...
- Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例
<p>这篇文章介绍如何使用 Jpa 和 Thymeleaf 做一个增删改查的示例.</p> 先和大家聊聊我为什么喜欢写这种脚手架的项目,在我学习一门新技术的时候,总是想快速的搭 ...
- (转)Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例
http://www.ityouknow.com/springboot/2017/09/23/spring-boot-jpa-thymeleaf-curd.html 这篇文章介绍如何使用 Jpa 和 ...
- Spring Boot 极简集成 Shiro
点击关注公众号,Java干货及时送达 1. 前言 Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理. Shiro有三大核心组件: Subject: ...
- 【站在微笑的肩上】Spring Boot 2 (四):使用 Docker 部署 Spring Boot
文章目录 前言 原文章 1. 一个简单 Spring Boot 项目 2. Spring Boot 项目添加 Docker 支持 3. 构建打包环境 3.1 安装 Docker 环境 3.2 安装JD ...
最新文章
- 完全理解 Python 迭代对象、迭代器、生成器(转)
- foo php,php – $foo === TRUE和TRUE === $foo有什么区别?
- 借助云开发轻松实现后台数据批量导出丨实战
- 乐高机器人教室布置图片大全_圣诞节手抄报内容简单图片漂亮
- python程序写完后点哪个运行快_让 Python 代码运行更快的最佳方式!
- 三款旗舰手机、四大高端生态新品,Redmi发布K50系列等七大重磅新品
- EJB3.0学习笔记---Bean实现多个接口的情况下定义,访问方式:
- php如何实现qq第三方登录,PHP实现qq第三方登录
- Lucene(.net)学习
- mysql 修改字段为主键自增_给MySQL中某表增加一个新字段,设为主键值为自动增长。...
- java彩票开奖程序_用java 实现彩票摇奖,猜拳程序
- 数据分析常用图表常用场景
- 如何终止运行matlab,matlab终止运行命令
- 由夏时令引起的java世界时间不一致问题
- ElasticsearchBboss MySQL 同步数据到Elasticsearch
- VC++ 防火墙 Win7 XP MFC
- 系综理论(Ensemble Theory)
- python 仪表盘 ppt_python+仪表
- C语言基于单链表的词典软件
- spring boot——关于一个Mysql主键的问题
热门文章
- [转载] JAVA笔记_(Day04,Day05)函数数组
- pipedreader_Java PipedReader ready()方法与示例
- css clearfix_如何使用CSS清除浮点数(clearfix)?
- 为什么工作很卖力,最后还晋升不了?
- Java14来了!Switch竟如此简单?Lombok也不需要了?来用Idea搭建Java14吧!
- TortoiseGIT创建及合并分支
- Java基础结构语句和IDEA使用和数组
- Linux QT5.12 一种整体界面字体设置的方法及设置PlainTextEdit组件的字体大小方法
- Apache httpd 配置HTTPS SSL访问 443
- mysql多表联查到新的表中_MySQL中的多表联查