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

时间:2018-12-21 06:38:28

标签: jwt

我在Spring Boot中创建了一个JWT令牌,用于存储用户详细信息。当我使用Jwttokenutil。 getUsernameFromToken (authToken)[authToken是传递的令牌]方法时,我将数据设置为Subject。同样,我想获取包含其他用户详细信息的有效载荷数据集。但我无法得到它。

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

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");
    }

===但我收到此错误===

java.lang.IllegalStateException:不能同时指定“有效载荷”和“声明”。选择其中一个。

1 个答案:

答案 0 :(得分:1)

晚了,但我希望它能为某人服务。 .setPayload (...) 用于创建我们定义的有效负载,您在声明中遇到的错误是因为 .setPayload (...) 不应与以下任何一项一起使用 .setSubject (...) 。宣称 (...) .setIssuedAt (....) .setExpiration (...)