前言

前面配置了怎么使用 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的密码加密相关推荐

  1. Spring Boot(十四):spring boot整合shiro-登录认证和权限管理

    Spring Boot(十四):spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉 ...

  2. (转)Spring Boot (十四): Spring Boot 整合 Shiro-登录认证和权限管理

    http://www.ityouknow.com/springboot/2017/06/26/spring-boot-shiro.html 这篇文章我们来学习如何使用 Spring Boot 集成 A ...

  3. Spring Boot系列四 Spring @Value 属性注入使用总结一

    @Value注入 不通过配置文件的注入属性的情况 通过@Value将外部的值动态注入到Bean中,使用的情况有: 注入普通字符串 注入操作系统属性 注入表达式结果 注入其他Bean属性:注入beanI ...

  4. spring boot(十五)spring boot+thymeleaf+jpa增删改查示例

    快速上手 配置文件 pom包配置 pom包里面添加jpa和thymeleaf的相关包引用 <dependency><groupId>org.springframework.bo ...

  5. Spring Security技术栈学习笔记(十四)使用Spring Social集成QQ登录验证方式

    上一篇文章<Spring Security技术栈开发企业级认证与授权(十三)Spring Social集成第三方登录验证开发流程介绍>主要是介绍了OAuth2协议的基本内容以及Spring ...

  6. Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例

    <p>这篇文章介绍如何使用 Jpa 和 Thymeleaf 做一个增删改查的示例.</p> 先和大家聊聊我为什么喜欢写这种脚手架的项目,在我学习一门新技术的时候,总是想快速的搭 ...

  7. (转)Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例

    http://www.ityouknow.com/springboot/2017/09/23/spring-boot-jpa-thymeleaf-curd.html 这篇文章介绍如何使用 Jpa 和 ...

  8. Spring Boot 极简集成 Shiro

    点击关注公众号,Java干货及时送达 1. 前言 Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理. Shiro有三大核心组件: Subject: ...

  9. 【站在微笑的肩上】Spring Boot 2 (四):使用 Docker 部署 Spring Boot

    文章目录 前言 原文章 1. 一个简单 Spring Boot 项目 2. Spring Boot 项目添加 Docker 支持 3. 构建打包环境 3.1 安装 Docker 环境 3.2 安装JD ...

最新文章

  1. 完全理解 Python 迭代对象、迭代器、生成器(转)
  2. foo php,php – $foo === TRUE和TRUE === $foo有什么区别?
  3. 借助云开发轻松实现后台数据批量导出丨实战
  4. 乐高机器人教室布置图片大全_圣诞节手抄报内容简单图片漂亮
  5. python程序写完后点哪个运行快_让 Python 代码运行更快的最佳方式!
  6. 三款旗舰手机、四大高端生态新品,Redmi发布K50系列等七大重磅新品
  7. EJB3.0学习笔记---Bean实现多个接口的情况下定义,访问方式:
  8. php如何实现qq第三方登录,PHP实现qq第三方登录
  9. Lucene(.net)学习
  10. mysql 修改字段为主键自增_给MySQL中某表增加一个新字段,设为主键值为自动增长。...
  11. java彩票开奖程序_用java 实现彩票摇奖,猜拳程序
  12. 数据分析常用图表常用场景
  13. 如何终止运行matlab,matlab终止运行命令
  14. 由夏时令引起的java世界时间不一致问题
  15. ElasticsearchBboss MySQL 同步数据到Elasticsearch
  16. VC++ 防火墙 Win7 XP MFC
  17. 系综理论(Ensemble Theory)
  18. python 仪表盘 ppt_python+仪表
  19. C语言基于单链表的词典软件
  20. spring boot——关于一个Mysql主键的问题

热门文章

  1. [转载] JAVA笔记_(Day04,Day05)函数数组
  2. pipedreader_Java PipedReader ready()方法与示例
  3. css clearfix_如何使用CSS清除浮点数(clearfix)?
  4. 为什么工作很卖力,最后还晋升不了?
  5. Java14来了!Switch竟如此简单?Lombok也不需要了?来用Idea搭建Java14吧!
  6. TortoiseGIT创建及合并分支
  7. Java基础结构语句和IDEA使用和数组
  8. Linux QT5.12 一种整体界面字体设置的方法及设置PlainTextEdit组件的字体大小方法
  9. Apache httpd 配置HTTPS SSL访问 443
  10. mysql多表联查到新的表中_MySQL中的多表联查