SpringBoot中Shiro的应用
为什么使用Shiro,使用Shiro主要做什么事情
1)用户登录时,进行用户名密码校验;
2)用户登录后,收到请求时做Token的校验,这里用到JWT Token认证;
3)校验用户权限
遇到的问题
#1. Odd number of characters
集成完Shiro后遇到报错:Odd number of characters.
错误内容大概是在说,加密部分出现了问题,字符不合法,出现奇数个字符。
解决办法:
将用户密码经过MD5加密后存储,再读取出来解析获取token,主要原因是在Realm中,重写doGetAuthenticationInfo方法时,返回的对象中return new SimpleAuthenticationInfo(adminUser, adminUser.getPassword(), ByteSource.Util.bytes(encryptSalt), "dbRealm");
保证传入的password是经过加密的,就不会报这个错误。
2. 密码校验不一致(提交的凭据与预期的凭据不匹配)
Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - 1, rememberMe=false] did not match the expected credentials.
原因有好多种,最常见的原因是,存入数据库时password的加密方式与当前获取到的密码加密方式不一致导致,解决方案:
核对当前password的加密方式(⚠️注意是在从前端获取到password后,传入UsernamePasswordToken之前,一定要保证在传入UsernamePasswordToken之前按照存入数据库的加密方式加密,切勿添加其他加密方式)