千家信息网

Spring Boot集成Shiro并使用SHA-256加密密码的方法

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"Spring Boot集成Shiro并使用SHA-256加密密码的方法",在日常操作中,相信很多人在Spring Boot集成Shiro并使用SHA-256加密密码的方法问题上存在疑
千家信息网最后更新 2026年10月31日Spring Boot集成Shiro并使用SHA-256加密密码的方法

这篇文章主要介绍"Spring Boot集成Shiro并使用SHA-256加密密码的方法",在日常操作中,相信很多人在Spring Boot集成Shiro并使用SHA-256加密密码的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Spring Boot集成Shiro并使用SHA-256加密密码的方法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

我们不能将用户的密码以明文存储,否则如果自己的数据库被入侵,用户在其他网站的帐号也可能被盗。

注册时生成密文

Shiro 提供了一个 SimpleHash 类可以很方便的对字符串进行加密,只需一行代码就可以对密码进行加密。

String hashPassword = new SimpleHash("SHA-256", password, username+"reg", 1024).toString();

它的第一个参数是加密的算法,第二个是要加密的内容,第三个是盐(这个参数随便你定),第四个是期望的次数。

得到加密之后的密码,就可以将整个 User 对象存储到数据库中,以后登录的时候再通过 Realm 查询。

/**

* 注入用于存储 user 对象

*/

@Autowired

private UserService userService;

@GetMapping("reg")

public Object reg(@RequestParam(name = "username") String username,

@RequestParam(name = "password") String password) {

String hashPassword = new SimpleHash("SHA-256", password, username+"reg", 1024).toString();

User user = new User();

user.setUsername(username);

user.setPassword(hashPassword);

user.setSalt(username + "reg");

userService.addUser(user);

return "注册成功";

}

Realm

上一篇文章说了如何实现登录,但是当时没有对密码进行加密。

加密之后的 Realm 又该怎么写了呢?

Shiro 给人一种感觉:基本的东西我都准备好了,你要啥就自己加。

所以只需要在自定义 Realm 里重写它的 setCredentialsMatcher 接口,在里面指定算法类型、期望的次数就行了。

@Override

public void setCredentialsMatcher(CredentialsMatcher credentialsMatcher) {

HashedCredentialsMatcher matcher = new HashedCredentialsMatcher();

matcher.setHashAlgorithmName("SHA-256");

matcher.setHashIterations(1024);

super.setCredentialsMatcher(matcher);

}

这里跟注册时基本一致,不过好像没有指定盐?

加密使用了盐,验证的时候也少不了它,只不过它不是写在这里的,毕竟每个用户的盐可能是不一致的(盐根据你自己的想法去设置)。

可还记得 doGetAuthenticationInfo 方法返回了一个身份认证信息对象供 Shiro 验证,使用盐之后,在创建这个对象的时候把盐传进去就行了。

注意:因为现在需要的不仅仅是密码,还需要盐。所以模拟查询数据库的时候不能仅仅返回一个字符串了,而是应该返回一个对象,然后从对象中取出密码、盐。

/**

* 注入用于存储 user 对象

*/

@Autowired

private UserService userService;

@Override

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

String username = token.getPrincipal().toString();

User user = userService.getUserByUsername(username);

if (user != null) {

String password = user.getPassword();

AuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(

username,

password,

//传入盐

ByteSource.Util.bytes(user.getSalt()),

getName());

return authenticationInfo;

}

return null;

}

模拟存取 User 对象

一切为了简单。

@Service

public class UserService {

private HashMap users = new HashMap<>();

public void addUser(User user) {

users.put(user.getUsername(), user);

}

public User getUserByUsername(String username) {

return users.get(username);

}

}

到此,关于"Spring Boot集成Shiro并使用SHA-256加密密码的方法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

加密 密码 对象 方法 时候 存储 学习 数据 数据库 用户 一致 参数 字符 字符串 更多 次数 算法 篇文章 网站 帮助 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 湖南永感互联网科技有限公司 美国互联网保险保险科技 互联网最新的科技 科技企业和互联网企业 互联网高科技企业 大白互联网科技 互联网企业和科技型企业 广州恒生互联网科技有限 受益于互联网科技的高速发展 重庆互联网医院沙龙医盟信息科技 苏州五指互联网络科技有限 互联网与医疗科技 互联网保险科技创业 启辰互联网科技 济南小医互联网科技有限公司招聘 互联网科技手抄报图片 求路客互联网科技电话 安徽零酒互联网科技有限公司 科技互联网专业务虚会材料 手冲咖啡和咖啡机区别 喔噻互联网科技有限公司 深圳期待互联网科技 互联网科技公司需要的职位 智腾互联网科技有限公司 互联网科技人工智能实验室 为客找房互联网科技公司怎么样 国产互联网科技公司 数字互联网科技有限公司 青岛易易互联网科技
0