首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jjwt时如何设置jwt的过期

使用jjwt时如何设置jwt的过期
EN

Stack Overflow用户
提问于 2021-06-17 02:12:29
回答 2查看 332关注 0票数 0

现在,我使用这段代码在我的项目中生成一个JWT令牌并设置一个过期时间:

代码语言:javascript
复制
SecretKey secretKey = new SecretKeySpec(jwtSignKey.getBytes(), SignatureAlgorithm.HS256.getJcaName());
        JwtPayload jwtPayload = new JwtPayload();
        jwtPayload.setUserId(user.getId());
        jwtPayload.setDeviceId(request.getDeviceId());
        jwtPayload.setAppId(Long.valueOf(request.getApp().getKey()));
        byte[] bytesEncoded = Base64.encodeBase64(JSON.toJSONString(jwtPayload).getBytes());
        String accessToken = Jwts.builder().setPayload(new String(bytesEncoded))
                .setExpiration(new Date(System.currentTimeMillis() + 30*1000))
                .signWith(secretKey).compact();

但它告诉我:

代码语言:javascript
复制
Both 'payload' and 'claims' cannot both be specified. Choose either one.

那么,我应该如何使用令牌设置过期时间呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-17 03:35:02

playload和claim应该选择其中之一,setExpiration属于索赔,所以只需像下面这样修改代码:

代码语言:javascript
复制
 public static String generateAccessToken(String jwtSignKey, JwtPayload jwtPayload) {
        SecretKey secretKey = new SecretKeySpec(jwtSignKey.getBytes(), SignatureAlgorithm.HS256.getJcaName());
        ObjectMapper objectMapper = new ObjectMapper();
        Map claims = objectMapper.convertValue(jwtPayload, Map.class);
        String accessToken = Jwts.builder().setClaims(claims)
                .setExpiration(new Date(System.currentTimeMillis() + 30 * 1000))
                .signWith(secretKey).compact();
        return accessToken;
    }
票数 0
EN

Stack Overflow用户

发布于 2021-06-17 02:24:21

根据,有效载荷必须是纯文本(非JSON)字符串。您可以尝试对该值进行base64编码,或者可能通过Jwts.claims()创建一个声明。

你能详细说明你的目标是什么吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68012008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档