在 Shiro+SpringBoot+JWT 的项目中的问题,麻烦会 Shiro 的大佬解答一下,谢谢

2022-12-08 16:59:32 +08:00
 janyork

在 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 。

还望会的大佬解答一下。

1636 次点击
所在节点    Java
9 条回复
me221
2022-12-08 17:11:38 +08:00
你的问题我不会

你的主题我想要
janyork
2022-12-08 17:17:36 +08:00
@me221 主题是 IDEA 新 UI+xcode 主题+图标美化包(叫啥 ICO 去了),字体是站酷快乐体
alen0206
2022-12-08 17:22:13 +08:00
第二个 login 接口看下来其实没有和 shiro 有什么交互,配置的 HashedCredentialsMatcher 这个 bean 其实没用
cslive
2022-12-08 17:40:21 +08:00
自定义一个 Filte 类,继承 BasicHttpAuthenticationFilter ,这个方法 executeLogin 重写,判断请求有无 token;
用这个判断有无登录
Realm 判断你是不是合法 token
yusheng88
2022-12-08 18:09:08 +08:00
用 jwt ,直接自己继承 servlet 的 filter 实现认证功能,不需要 shiro 。
Bingchunmoli
2022-12-09 02:17:47 +08:00
建议百度 shiro 实现 jwt 。 很多种方式
janyork
2022-12-09 08:55:31 +08:00
@alen0206 我也是这样想的,用 JWT 是不是 shiro 就不需要配置凭证校验器,只能自己用 MD5 加密去对比,他不能自动对比了。
janyork
2022-12-09 08:56:34 +08:00
@Bingchunmoli 你猜我为什么来这儿问,百度翻遍了,用凭证校验器都是没有用 JWT 的,用 JWT 的文章又没有去进 MD5 加密配置
janyork
2022-12-09 08:57:02 +08:00
@yusheng88 权限需要 shiro ,我大概明白了,感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/901133

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX