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

如何在JWT令牌中设置和获取有效负载的内容

葛昱
2023-03-14

我在Spring Boot中创建了一个JWT令牌,用于存储用户详细信息。当我使用Jwttokenutil时。getUsernameFromToken(authToken)[authToken是传递的令牌]方法我将数据集获取给Subject。类似地,我希望将包含其他用户详细信息的数据集获取到Payload。但是我不能得到它。

======下面是我的令牌生成方法/代码:========

public String generateToken(HashMap<String, Object> userData,String subject)
    {
        String jwtToken="";

                System.out.println("in generate token method : " + subject);

        jwtToken = Jwts.builder()
                .setSubject(subject)   // subject is dbname
                .claim("userDetails", userData)
                .setPayload(userData.toString())
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + 60*60*5*1000))
                .signWith(SignatureAlgorithm.HS256, "secretkey") 
                .compact();


                System.out.println("userData " + userData);

        return jwtToken;
    }

======= 下面是我创建的获取有效载荷数据的方法 ======

public Object getPayloadFromToken(String token)
    {
        Claims body= Jwts.parser()
        .setSigningKey("secretkey")
        .parseClaimsJws(token)
        .getBody();

        System.out.println("userdet==========> " + body.get("userDetails") );
        return body.get("userDetails");
    }

===但是我得到这个错误===

JAVAlang.IllegalStateException:不能同时指定“有效负载”和“索赔”。任选一个。

共有1个答案

阙弘博
2023-03-14

很晚了,但我希望它能为某人服务。设置有效负载(…)用于创建由我们定义的有效负载,您在声明中得到的错误是因为。设置有效负载(…)不应与以下任何一项一起使用。setSubject(…)。索赔(……)。设置发布日期(..)。setExpiration(…)

 类似资料:
  • 我使API服务器与Node.js和快递。 我还为auth用户使用了JWT令牌身份验证。 如果令牌过期,我的场景就在这里。 > ,因为它不会检查签名是否正确。 对于提取过期令牌的有效负载,有什么解决方案吗? 谢谢。

  • 我想用当前的方法加密JWT负载,比如对称或非对称加密方法。我的问题是,如果我使用这些方法,javascript需要在客户端对我的数据执行任何操作?还是加密和验证的所有部分都将在服务器端完成?在本文中,他们说,如果需要加密负载,则必须存储公钥(由于RSA或…)等加密算法的缘故)。为什么?如果我需要加密有效负载,为什么我们需要在jwt令牌中存储公钥(或任何密钥)?有没有办法只在服务器端对称加密有效负载

  • 如果我创建一个JWT令牌,有效负载中应该有哪些数据?我在网上查找了一些示例和解释,有些人将密码放在JWT中,有些人没有。 现在我正在传递以下数据: 将散列密码放入JWT有效负载感觉不对,因为JWT将被放置在前端应用程序中。它应该在那里吗? 最佳实践是什么?

  • 您好,我正在JWTTokenStore中使用Spring Security Oauth2。我想在用户将令牌内容与资源请求一起发送回来后从REST服务读取令牌内容。例如:curl-i-H“授权:持有人”http://localhost:8080/api/UserDetails 读取UserDetails服务中的令牌。 非常感谢。

  • 我遵循本教程使用JWT令牌。令牌到期时间设置为仅5分钟,但如果我想在使用1分钟后使令牌无效,该怎么办?我希望能够对API进行调用,以删除我的令牌。 我正在使用Express和Node。 从我能收集到的信息来看,我的选择是拥有一个存储令牌的令牌db。当我想让我的令牌过期时,我会从DB中过期/删除该令牌。 我还看到人们随意地说“移除”物理硬盘空间中的令牌,但我无法找出令牌的物理存储位置,以便我移除它。

  • 我使用 Laravel Tymon/JWT-AUTH 进行 JWT 身份验证。但是当我进行身份验证时,只需获取访问令牌,而不是刷新令牌 in package.json 我希望得到一个刷新令牌来刷新令牌到期后,在配置/jwt.php我可以设置访问令牌和刷新令牌的到期时间,但我不能得到它。如何获得刷新令牌?