日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

学习Spring Boot:(十四)spring-shiro的密码加密

發布時間:2025/3/12 javascript 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习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的密码加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。