RXLiuli
2018-04-27 09:08
不太清楚有没有碰到密码没有真正加密的问题...吾辈在 CustomRealm 中对传进来的密码进行了断点查看发现并没有加密(还是明文), 老师的课程中没有对比密码, 不知道会不会有没有问题呢? (」゜ロ゜)」
查看传入的 token 的值
同学你好,你配置的只是shiro验证的加密规则,在你保存的时候并没有去加密,所以数据库里的密码还是明文,你在保存的方法那里设置一下加密算法名字,加密次数,盐值即可。例子如下:
public void insert(User user1) { //对用户密码进行加盐处理 String salt = RandomStringUtils.randomAlphabetic(20); user.setPassword(new SimpleHash("MD5",user1.getPassword(),salt,20).toHex()); user1.setPassword(new Sha256Hash(user1.getPassword(),salt,20).toHex()); user1.setSalt(salt); this.save(user1); }
你看的密码没有加密是正确的,
HashedCredentialsMatcher中的 public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) { Object tokenHashedCredentials = hashProvidedCredentials(token, info); Object accountCredentials = getCredentials(info); return equals(tokenHashedCredentials, accountCredentials); } 方法会对传过来的明文密码按照HashedCredentialsMatcher对象的设置进行加密,然后与数据库里面的加密密码进行比对的
我也是。。。。。。。没有跟视频里一样,根本没散列。。
你的自定义realm的doGetAuthenticationInfo少了一行代码, 指定salt盐值。
如下:
SimpleAuthenticationInfo saf = new SimpleAuthenticationInfo(username, user.getPassword(), this.getName()); saf.setCredentialsSalt(ByteSource.Util.bytes(SALT)); return saf;
Shiro安全框架入门
48049 学习 · 347 问题
相似问题