我正在使用 Java with Spring 来构建一个rest api以及其他一些服务。
主要功能是用户的创建/登录。我知道 redis 中没有查询语言,这就是我在这里发帖的原因!是否有某种Java库允许我们查询 Redis ?在我的情况下,获取分配给用户(userId)的所有当前 jwt 标记(会话)?
我想到了自己的实现,但我认为它有点过头而且笨重?
实施例
如果同一用户登录,我必须再次检查并执行以下操作:
这意味着在每次请求受保护的api端点时,我必须按userId搜索,反序列化hashmap,循环遍历hashmap并尝试匹配标头中发送的JWT。这似乎很多工作?还有另一种方法吗?
如果用户想要注销该过程与再次登录非常相似,除了点 4。 ,我将从hashmap中删除JWT然后保存它。
目前我只是将 JWT 标记存储为密钥并执行简单的 jedis.get(RequestHeader.JWT)< / em> 在受保护的api端点上。如果有一种方法可以查询值而不是密钥,那么这将是理想的,因为我可以将密钥存储为JWT,将userId存储为值。
像这样:
final String token = authHeader.substring(7); // The part after "Bearer "
try {
final Claims claims = Jwts.parser().setSigningKey("${secret}")
.parseClaimsJws(token).getBody();
request.setAttribute("claims", claims);
request.setAttribute("token", token);
} catch (final SignatureException e) { throw new ServletException("Invalid token."); }
if (redisClient.get(token) == null) throw new ServletException("Invalid or expired token.");
答案 0 :(得分:2)
您可以按照以下步骤将JWT
用于您的API:
当用户致电api - &gt;你检查JWT:
如果您想获得登录用户,可以在用户登录时将登录用户存储在Redis中。