JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPwd())).build(); try { jwtVerifier.verify(token); } catch (JWTVerificationException e) { throw new RuntimeException("40
时间: 2024-02-14 14:08:27 浏览: 32
这段代码是使用Java JWT库对JWT进行验证的代码。JWTVerifier对象是通过使用用户密码(user.getPwd())作为密钥来构建的,Algorithm.HMAC256()表示使用HMAC SHA-256算法进行加密。然后,使用verify()方法对JWT进行验证,如果验证失败,则会抛出JWTVerificationException异常。如果验证成功,则代码会继续执行。在这段代码中,若JWT验证失败,则会抛出一个RuntimeException异常,提示验证失败的信息。
相关问题
public class JwtUtil { private static String SIGNAL = "1HU&**UUY**(GNH"; /** * 生成token */ public static String getToken(Map<String, String> map){ Calendar instance = Calendar.getInstance(); instance.add(Calendar.DATE, 30); //设置过期时间为30天 //创建jwt builder final JWTCreator.Builder builder = JWT.create(); //payload map.forEach((k,v)->{ builder.withClaim(k,v); }); String token = builder.withExpiresAt(instance.getTime())//指定令牌过期时间 .sign(Algorithm.HMAC256(SIGNAL));//sign return token; } public static DecodedJWT verify(String token){ return JWT.require(Algorithm.HMAC256(SIGNAL)).build().verify(token); } }
这是一个 Java 类,用于生成和验证 JSON Web Tokens (JWT)。JWT是一种轻量级的身份验证和授权机制,它通过在服务器和客户端之间传递加密的令牌来实现。该类中的 `getToken()` 方法用于生成JWT,它通过将包含用户信息的Map对象作为参数传递来创建JWT。JWT的过期时间被设置为30天。`verify()` 方法用于验证JWT,它需要传递JWT字符串作为参数,并返回一个 `DecodedJWT` 对象,该对象包含JWT的所有信息和有效性验证结果。这个类使用 HMAC256 算法来加密 JWT,密钥为 `SIGNAL` 变量中定义的字符串。
public class JwtInterceptor implements HandlerInterceptor { @Autowired private IUserService userService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String token = request.getHeader("token"); if (StrUtil.isBlank(token)) { token = request.getParameter("token"); } // 如果不是映射到方法直接通过 if(handler instanceof HandlerMethod) { AuthAccess annotation = ((HandlerMethod) handler).getMethodAnnotation(AuthAccess.class); if (annotation != null) { return true; } } // 执行认证 if (StrUtil.isBlank(token)) { throw new ServiceException(Constants.CODE_401, "无token,请重新登录"); } // 获取 token 中的 user id String userId; try { userId = JWT.decode(token).getAudience().get(0); } catch (JWTDecodeException j) { throw new ServiceException(Constants.CODE_401, "token验证失败,请重新登录"); } // 根据token中的userid查询数据库 User user = userService.getById(userId); if (user == null) { throw new ServiceException(Constants.CODE_401, "用户不存在,请重新登录"); } // 用户密码加签验证 token JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build(); try { jwtVerifier.verify(token); // 验证token } catch (JWTVerificationException e) { throw new ServiceException(Constants.CODE_401, "token验证失败,请重新登录"); } return true; } }
这是一个基于Spring框架的JWT认证拦截器,主要作用是在接口方法执行前对请求进行认证,确保请求的合法性。
具体实现过程如下:
1. 首先从请求头或请求参数中获取token。
2. 判断请求是否是映射到方法,如果不是直接通过。
3. 如果是映射到方法,判断方法上是否有注解@AuthAccess,如果有直接通过。
4. 如果没有@AuthAccess注解,则需要执行认证。
5. 如果没有token,抛出异常,提示无token,请重新登录。
6. 如果有token,从token中解析出用户ID,查询数据库获取用户信息。
7. 如果用户不存在,抛出异常,提示用户不存在,请重新登录。
8. 如果用户存在,使用用户密码对token进行加签验证,确保token的合法性。
9. 如果token验证失败,抛出异常,提示token验证失败,请重新登录。
10. 如果token验证成功,返回true表示通过认证,接口方法可以执行。