up:: JWT的原理 说明: 本篇博客主要内容是将session验证升级为JWT认证,主要部分是登陆时的校验,还会演示修改JWT信息时产生的后果以及探讨登出的思路 正式开发 1. 引入依赖,生成JWT <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.14.0</version> </dependency> 2.修改登陆的UserController 1.用户登陆时生成JWT @GetMapping("/loginWithJwt") @ResponseBody public ApiRestResponse loginWithJwt(@RequestParam String userName, @RequestParam String password) { if (StringUtils.isEmpty(userName)) { return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_USER_NAME); } if (StringUtils.isEmpty(password)) { return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_PASSWORD); } User user = userService.login(userName, password); //保存用户信息时,不保存密码 user.setPassword(null); Algorithm algorithm = Algorithm.HMAC256(Constant.JWT_KEY); String token = JWT.create() .withClaim(Constant.USER_NAME, user.getUsername()) .withClaim(Constant.USER_ID, user.getId()) .withClaim(Constant.USER_ROLE, user.getRole()) //过期时间 .withExpiresAt(new Date(System.currentTimeMillis() + Constant.EXPIRE_TIME)) .sign(algorithm); return ApiRestResponse.success(token); } 说明: Constant.java文件添加常量; public static final String JWT_KEY = "imooc-mall"; public static final String JWT_TOKEN = "jwt_token"; public static final String USER_ID = "user_id"; public static final String USER_NAME = "user_name"; public static final String USER_ROLE = "user_role"; public static final Long EXPIRE_TIME = 60 * 1000 * 60 * 24 * 1000L;//单位是毫秒