我在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:不能同时指定“有效载荷”和“声明”。选择其中一个。
答案 0 :(得分:1)
晚了,但我希望它能为某人服务。 .setPayload (...) 用于创建我们定义的有效负载,您在声明中遇到的错误是因为 .setPayload (...) 不应与以下任何一项一起使用 .setSubject (...) 。宣称 (...) .setIssuedAt (....) .setExpiration (...)