我们在使用 Shiro 实现登录的时候,我们只需要将账号、密码,Shiro 会自动判断账户、密码是否正确,那么 Shiro 怎么会知道我们的密码加密规则呢?所以我们需要自定义密码的加密规则
- 1、自定义加密规则
/** * 凭证匹配器 * 执行login(token)后由securityManager调用,用于计算密码加密后的密文 * * @return */ @Bean public HashedCredentialsMatcher hashedCredentialsMatcher() { HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); // 设置散列算法 hashedCredentialsMatcher.setHashAlgorithmName("md5"); // 设置散列计算次数,相当于md5(md5("")) hashedCredentialsMatcher.setHashIterations(6); // storedCredentialsHexEncoded默认是true,此时用的是密码加密用的是Hex编码;false时用Base64编码 hashedCredentialsMatcher.setStoredCredentialsHexEncoded(true); return hashedCredentialsMatcher; }
我们采用了 MD5 的非对称性加密规则,加密迭代6次
- 2、自定义认证授权规则
/** * 自定义认证授权规则 */ @Bean public LoginRelam loginRelam() { // 登录认证规则 LoginRelam loginRelam = new LoginRelam(); // 自定义加密规则 loginRelam.setCredentialsMatcher(hashedCredentialsMatcher()); return loginRelam; }
这样我们就实现了自定义密码加密规则,Shiro 在登录认证的时候会将传入的明文密码按照此规则加密后与数据库中的用户密码做比较,以此来判断密码是否正确