shiro 加盐加密验证问题

前言

  用户信息存储时,很多时候我们都不会存储明文的密码,这样防止数据库被盗后黑客直接可以得到数据库密码。所以我们很多时候都要对 用户明文密码加盐加密, 即: md5 ( 明文密码 + 盐(随机生成的字符串) ) ,当然这需要你自己去定义属于自己的加盐加密方式,并不能展示给别人。

正文

  shiro在进行密码验证时,需要把用户真实密码、加盐字符串传过去,然后定义一下加密方式就可以自动完成认证。一下就是具体的代码片段,如果有对shiro还不了解的可以直接查看我这篇博客:springboot2.x shiro整合

我们需要在ShiroConfig定义权限认证方法:

    /**
     * 设置加密算法
     *
     * @return
     */
    @Bean
    public HashedCredentialsMatcher matcher() {
        HashedCredentialsMatcher matcher = new HashedCredentialsMatcher();
        matcher.setHashAlgorithmName("md5"); // 设置加密算法
        matcher.setHashIterations(2); // 设置加密算法的次数默认为1,两次就是: md5(md5(str))
        return matcher;
    }

在UserRealm中验证方法:

return new SimpleAuthenticationInfo(user, user.getUserPassword(), ByteSource.Util.bytes(user.getSalt()), getName());
 // 四个参数的意思为: 数据库中取出的用户主体信息, 用户数据库中密码,加密盐,类名(这个是自己可以点进去看)

  而对应的我们注册时做的加盐加密,需要和shiro内置的方法一样才能匹配成功(这里我总感觉,shiro也提供了相应方法进行加密,只不过我没找到),而shiro是怎么做的呢 ,可以自己去调试一下,当时调了我几个小时才找到 现在找不到了。

下面就是我们自己写的注册时加密的方法,这个方法与shiro内置的验证时一样的:

  private String addSaltForPassword(String password, String salt) {
        return new Md5Hash(password, salt, 2).toString(); // shiro中默认加密必须要用Md5Hash
    }

这样就可以了!

你可能感兴趣的:(shiro,springboot)