在 Shiro+SpringBoot+JWT 的项目中,因为是前后分离+Token 验证,而 Shiro 默认是依靠 Session 来处理一些状态,而且登录也是通过 UserPassWoldToken 来实现登录验证的,但是前后分离,我们登录只需要去数据库验证密码后返回 Token ,不需要 Shiro 将用户信息通过 Subject 的 login 去登录校验并缓存。
如上图,这样就是不可取的,因为我们配合 JWT 的登录逻辑是不一样的,得这样实现:
我密码使用了 MD5+散列+盐加密,原来 shiro 是有一个自动的机制,也就是 HashedCredentialsMatcher ,这个凭证校验器可以帮你校验密码是否对应数据库中已经加密的密码。
我尝试过,发现貌似不太行,我也配置了 Realm 中的配置,也就是返回盐与密码。
当前,现在我给他删掉了,因为用不了,我还是改成了直接校验 Token 的方式,这应该没问题吧,我也不太熟这个 Shiro 。
反正现在接口我就直接给密码先加密在对比。
我想问问,前后分离+JWT 的系统下,shiro 的 HashedCredentialsMatcher (也就是 Shiro 的凭证校验器),是不是不能用啊,还是我配置有问题?
我试的时候,Debug 发现,它最后会去与缓存的用户 info 对比,我登录直接校验返回 token ,就没有用户给他缓存呀,因为我没有用它的subject.login(token);
这个方法去登录,他缓存中的用户 info 就是 null 。
还望会的大佬解答一下。
1
me221 2022-12-08 17:11:38 +08:00
你的问题我不会
你的主题我想要 |
3
alen0206 2022-12-08 17:22:13 +08:00
第二个 login 接口看下来其实没有和 shiro 有什么交互,配置的 HashedCredentialsMatcher 这个 bean 其实没用
|
4
cslive 2022-12-08 17:40:21 +08:00
自定义一个 Filte 类,继承 BasicHttpAuthenticationFilter ,这个方法 executeLogin 重写,判断请求有无 token;
用这个判断有无登录 Realm 判断你是不是合法 token |
5
yusheng88 2022-12-08 18:09:08 +08:00
用 jwt ,直接自己继承 servlet 的 filter 实现认证功能,不需要 shiro 。
|
6
Bingchunmoli 2022-12-09 02:17:47 +08:00 via Android
建议百度 shiro 实现 jwt 。 很多种方式
|
7
janyork OP @alen0206 我也是这样想的,用 JWT 是不是 shiro 就不需要配置凭证校验器,只能自己用 MD5 加密去对比,他不能自动对比了。
|
8
janyork OP @Bingchunmoli 你猜我为什么来这儿问,百度翻遍了,用凭证校验器都是没有用 JWT 的,用 JWT 的文章又没有去进 MD5 加密配置
|