在 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 。
还望会的大佬解答一下。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.