jwt token
- jwt 在api 方式中表中的token生成,验证以及获取jwt解密后携带的用户信息
jwt token过期以及刷新问题
- jwt token必须设置过期时间,因为如果不设置被盗会一直被使用
- jwt token过期回跑出ExpiredJwtException异常
- jwt可以同时为一个用户id创建多个token,都可以使用
结合gateway鉴权
- 网关放开login接口,登录生成jwt生成token
- 前端将token在所有的请求时放到http header头中
- 经过网关,jwt验证token获取携带的用户信息如用户id等
- 验证失败提示鉴权失败,否则
- 网关将用户id方到请求头中下方到内部服务
jwt部分简单代码
HashMap<String, Object> map = new HashMap<>();
// you can put any data in the map
map.put("userId", String.valueOf(userId));
map.put("xxx", xxx);
map.put("ddd", ddd);
long nowMillis = System.currentTimeMillis();
JwtBuilder jwtBuilder =
Jwts.builder().setClaims(map).signWith(SignatureAlgorithm.HS512, SECRET);
// 过期时间
if (ttlMillis >= 0) {
long expMillis = nowMillis + ttlMillis;
Date exp = new Date(expMillis);
jwtBuilder.setExpiration(exp);
}
return jwtBuilder.compact();
public static Map<String, Object> validateToken(String token) {
try {
// parse the token.
Map<String, Object> body = Jwts.parser().setSigningKey(SECRET)
.parseClaimsJws(token.replace("Bearer", "")).getBody();
return body;
} catch (ExpiredJwtException e) {
throw new AuthBizException(xxx, "签名已经过期");
} catch (Exception e) {
throw new AuthBizException(xxx, "签名验证失败");
}
}
token如何处理会话