为什么在筛选器中使用UserDetailsService?JWT

为什么在筛选器中使用UserDetailsService?JWT,jwt,jwt-auth,Jwt,Jwt Auth,我查看了很多jwt的教程和示例,例如,如果您在google上搜索“spring security jwt示例”,您可能会看到以下链接: 问题)他们的AuthFilter使用UserDetailsService,所以他们从数据库中获取数据,因为它只是一个简单的令牌,而不是JWT 所以我想我不明白什么 UPD:我会做什么: 或者创建自定义身份验证和自定义身份验证提供程序 或者只使用JwtUtil类,该类将对jwt进行解码,然后创建默认用户名PasswordAuthToken并将其设置为Secu

我查看了很多jwt的教程和示例,例如,如果您在google上搜索“spring security jwt示例”,您可能会看到以下链接:

  • 问题)他们的AuthFilter使用UserDetailsService,所以他们从数据库中获取数据,因为它只是一个简单的令牌,而不是JWT

    所以我想我不明白什么

    UPD:我会做什么:

    或者创建自定义身份验证和自定义身份验证提供程序


    或者只使用JwtUtil类,该类将对jwt进行解码,然后创建默认用户名PasswordAuthToken并将其设置为SecurityContextHolder。

    在另一次审阅后,我注意到,我遗漏了

    注意,上面过滤器中的数据库命中是可选的。你可以 还可以在JWT声明中对用户的用户名和角色进行编码,并创建 UserDetails对象通过解析JWT中的那些声明。那个 将避免数据库被击中

    但是,从数据库加载用户的当前详细信息 可能还是有帮助的。例如,您可能想禁止登录 如果用户的角色已更改或用户已更新,则使用此JWT 在创建此JWT后输入他的密码


    看看这里:@SimonMartinelli您建议使用OAuth2吗?如果您这样做了,现在,我只想进入简单的jwt实现,以便更好地理解它。实际上,我看过OAuth,但现在对我来说有点复杂(理论上我知道了,但没有实现)。你必须在某个地方存储用户数据,这就是你的链接使用UserDetailService的原因。“我的链接”使用的授权服务器更常见scenario@SimonMartinelli如果我们使用JWT,为什么在这种情况下需要存储用户数据?它已经有了关于user@SimonMartinelli我在JWT的安全性中只看到UserDetailsService的一个场景,它是post-request“/login”,在那里我们通过用户名找到一个调用这个UserDetailsService的用户,然后将用户编码到JWT并返回给客户端。