當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
学习Spring Boot:(十四)spring-shiro的密码加密
生活随笔
收集整理的這篇文章主要介紹了
学习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的密码加密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第四范式裴沵思出席绿公司年会:传统企业要
- 下一篇: Mybatis源码分析之(七)Mybat