V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
janyork
V2EX  ›  Java

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

  •  
  •   janyork · 2022-12-08 16:59:32 +08:00 · 1867 次点击
    这是一个创建于 720 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 Shiro+SpringBoot+JWT 的项目中,因为是前后分离+Token 验证,而 Shiro 默认是依靠 Session 来处理一些状态,而且登录也是通过 UserPassWoldToken 来实现登录验证的,但是前后分离,我们登录只需要去数据库验证密码后返回 Token ,不需要 Shiro 将用户信息通过 Subject 的 login 去登录校验并缓存。

    如上图,这样就是不可取的,因为我们配合 JWT 的登录逻辑是不一样的,得这样实现:

    image.png

    我密码使用了 MD5+散列+盐加密,原来 shiro 是有一个自动的机制,也就是 HashedCredentialsMatcher ,这个凭证校验器可以帮你校验密码是否对应数据库中已经加密的密码。

    我尝试过,发现貌似不太行,我也配置了 Realm 中的配置,也就是返回盐与密码。

    当前,现在我给他删掉了,因为用不了,我还是改成了直接校验 Token 的方式,这应该没问题吧,我也不太熟这个 Shiro 。

    反正现在接口我就直接给密码先加密在对比。

    image.png

    我想问问,前后分离+JWT 的系统下,shiro 的 HashedCredentialsMatcher (也就是 Shiro 的凭证校验器),是不是不能用啊,还是我配置有问题?

    我试的时候,Debug 发现,它最后会去与缓存的用户 info 对比,我登录直接校验返回 token ,就没有用户给他缓存呀,因为我没有用它的subject.login(token);这个方法去登录,他缓存中的用户 info 就是 null 。

    还望会的大佬解答一下。

    9 条回复    2022-12-09 08:57:02 +08:00
    me221
        1
    me221  
       2022-12-08 17:11:38 +08:00
    你的问题我不会

    你的主题我想要
    janyork
        2
    janyork  
    OP
       2022-12-08 17:17:36 +08:00
    @me221 主题是 IDEA 新 UI+xcode 主题+图标美化包(叫啥 ICO 去了),字体是站酷快乐体
    alen0206
        3
    alen0206  
       2022-12-08 17:22:13 +08:00
    第二个 login 接口看下来其实没有和 shiro 有什么交互,配置的 HashedCredentialsMatcher 这个 bean 其实没用
    cslive
        4
    cslive  
       2022-12-08 17:40:21 +08:00
    自定义一个 Filte 类,继承 BasicHttpAuthenticationFilter ,这个方法 executeLogin 重写,判断请求有无 token;
    用这个判断有无登录
    Realm 判断你是不是合法 token
    yusheng88
        5
    yusheng88  
       2022-12-08 18:09:08 +08:00
    用 jwt ,直接自己继承 servlet 的 filter 实现认证功能,不需要 shiro 。
    Bingchunmoli
        6
    Bingchunmoli  
       2022-12-09 02:17:47 +08:00 via Android
    建议百度 shiro 实现 jwt 。 很多种方式
    janyork
        7
    janyork  
    OP
       2022-12-09 08:55:31 +08:00
    @alen0206 我也是这样想的,用 JWT 是不是 shiro 就不需要配置凭证校验器,只能自己用 MD5 加密去对比,他不能自动对比了。
    janyork
        8
    janyork  
    OP
       2022-12-09 08:56:34 +08:00   ❤️ 1
    @Bingchunmoli 你猜我为什么来这儿问,百度翻遍了,用凭证校验器都是没有用 JWT 的,用 JWT 的文章又没有去进 MD5 加密配置
    janyork
        9
    janyork  
    OP
       2022-12-09 08:57:02 +08:00
    @yusheng88 权限需要 shiro ,我大概明白了,感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3502 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:58 · PVG 12:58 · LAX 20:58 · JFK 23:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.