Java-token

2018-05-08  本文已影响165人  07120665a058

token基础

生成token

private String generateToken(Long userId) throws UnsupportedEncodingException {
        String secret = "secret";
        HashMap<String, Object> map = new HashMap<>();
        map.put("userId", userId);
        String jwt = Jwts.builder()
                .setClaims(map)
                .signWith(SignatureAlgorithm.HS512, secret.getBytes("UTF-8"))
                .compact();
        return jwt;
    }

解析token

Claims getClaimsFromToken(String token) {
    Claims claims;
    try {
        claims = Jwts.parser()
                .setSigningKey(secret)
                .parseClaimsJws(token)
                .getBody();
    } catch (Exception e) {
        claims = null;
    }
    return claims;
}

问题 : 在退出登录 / 修改密码时怎样实现JWT Token失效?
回答 : 退出登录时, 只要客户端丢弃Token,服务器端不需要丢弃Token

问题 : 要是用户已经在多设备登录了,而且本地保存了token。当一个地方丢弃token,只有token没有过期,那之前token还是可以用
回答:数据库建一个表user_token(uid,token),用户登录成功将token存到数据库,用户登出清除token,每次对比传过来的token和该用户在数据库的token是否相同,保证一个uid只生成一个token。

问题 : 如果在服务端存储token,那随便存储个字符串也可以,不一定要用token

JWT只不过提供了一种基于token的请求验证机制,但用户权限,API权限,资源权限等限制可以用Spring Security来实现。

上一篇下一篇

猜你喜欢

热点阅读