当前位置: 首页 > 知识库问答 >
问题:

在使用JWT设置成员资格时,使用Spring Security的UserDetailsService有什么好处吗?

符正信
2023-03-14

我正在应用JWT对请求进行身份验证。解析和验证工作在我的Spring Cloud Gateway中。我在SecurityWebFilterChain上创建了一个自定义过滤器,它解析和验证请求头中的JWT。

我发现它的大多数示例都使用UserDetails来创建身份验证类。

我发现的大多数示例使用UsernamePasswordAuthenticationToken,我发现它需要UserDetails。要构建userdetails,它基本上需要用户名、密码和角色。

但在我的例子中,我不希望每次收到请求时都用用户DB验证我的jwt。此外,我不需要用户的密码,因为我不会验证它一旦我生成令牌。我只想在JWT有效负载中使用用户名和角色。

UserDetails userDetails = User.builder().username(String.valueOf(parsedInfo.get("username")))
    .authorities(parsedInfo.get("roles")).password("dummypassword").build();

我认为我的解决方案没有正确地应用Spring Security性。但是如果我不使用UserDetails,那么使用spring Security有什么好处吗?

我的案子还有更好的解决办法吗?

共有1个答案

贾沛
2023-03-14

如果只是需要验证JWT令牌,那么可以使用Spring AOP进行验证。

@Aspect
@Component
public class JwtAspect {

    @Before("execution(* com.yourpackageName.* (..))")
    public void checkJwtToken(JoinPoint joinPoint) {
        String jwtTOken = request.getToken();
        if (null == jwtToken) {
            throw new Exception("Token Not Found. ");
        }
        parseToken(jwtToken);
        joinPoint.proceed();
    }

}

如果您得到了令牌,则解析它并检查过期时间。如果以上一切正常,您可以继续joinpoint

 类似资料:
  • 问题内容: 我的应用程序中有一些内存泄漏。它们都起源于一个特定的视图集群,我花了大量时间进行调整,并尝试减少尽可能多的上下文传递。这使我相信群集中使用的位图就是问题所在。因此,我考虑将WeakReferences用于所有对视图使用的位图的引用。我从未使用过WeakReference,并且不确定这是否是一个好的应用程序。任何机构都可以提供有用的指示或技巧吗? 问题答案: 因此,我考虑将WeakRef

  • 在Kubernetes文档中,它提到使用的缓存语义使得ImagePullPolicy非常高效。我想选择不同的ImagePullPolicy的原因是什么?

  • 本文向大家介绍使用黄瓜有什么好处?,包括了使用黄瓜有什么好处?的使用技巧和注意事项,需要的朋友参考一下 下面列出了使用黄瓜的一些优点- Cucumber是一种开源工具,不需要许可。 黄瓜可以通过Eclipse等IDE轻松配置。 黄瓜弥合了开发人员,测试人员,业务分析师,客户和产品所有者之间的理解和沟通差距。 黄瓜使没有技术知识的业务利益相关者参与其中。 黄瓜提供纯文本表示形式,使团队中的非技术人员

  • 问题内容: 我看到人们正在运行Nginx + Gunicorn + Flask之类的设置。 谁能解释在flask前使用Gunicorn有什么好处?为什么不只运行Flask?运行Gunicorn + Flask会消耗更多资源吗?Gunicorn无法响应时,可以重启Flask实例吗? 将nginx放在gunicorn上还有什么目的? 问题答案: 我认为你可能会感到困惑,Flask不是Web服务器,它是

  • 我为我的应用的用户集合中的每个文档都有一个子集合。此子集合存储与用户相关的文档,但是它们也可以保存到主集合中,每个文档都有一个关联的 userId。 我选择了这种结构,因为它在当时似乎是最明显的,但我可以想象,如果我需要进行数据库维护,它将使事情变得更加困难。例如,如果我想清理这些文档,我必须先查询每个用户,然后再查询每个用户的文档,而如果我有一个主集合,我可以只查询所有文档。 这让我不禁要问,如

  • 问题内容: 我正在浏览以下代码示例: 我想知道使用Iterator接口的实现而不是使用普通的for-each循环有什么好处? 如果此示例不相关,那么当我们应该使用Iterator时会是一个好的情况吗? 谢谢。 问题答案: 该 for-each循环 与Java 5中引入的,所以它不是那么“老”。 如果只想迭代一个集合,则应为每个循环使用 但是有时“普通的” 迭代器的 方法对于检查 迭代器 是否还有更