springboot整合JWT使用
生活随笔
收集整理的這篇文章主要介紹了
springboot整合JWT使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
@RestController
@Slf4j
public class UserController {@Resourceprivate UserService userService;@GetMapping("/user/login")public Map<String, Object> login(User user) {log.info("用戶名:{}", user.getName());log.info("password: {}", user.getPassword());Map<String, Object> map = new HashMap<>();try {User userDB = userService.login(user);Map<String, String> payload = new HashMap<>();payload.put("id", userDB.getId());payload.put("name", userDB.getName());String token = JWTUtils.getToken(payload);map.put("state", true);map.put("msg", "登錄成功");map.put("token", token);return map;} catch (Exception e) {e.printStackTrace();map.put("state", false);map.put("msg", e.getMessage());map.put("token", "");}return map;}@PostMapping("/user/test")public Map<String, Object> test(HttpServletRequest request) {String token = request.getHeader("token");DecodedJWT verify = JWTUtils.verify(token);String id = verify.getClaim("id").asString();String name = verify.getClaim("name").asString();log.info("用戶id:{}", id);log.info("用戶名: {}", name);//TODO 業務邏輯Map<String, Object> map = new HashMap<>();map.put("state", true);map.put("msg", "請求成功");return map;}}
@RestController
@Slf4j
public class UserController {@Resourceprivate UserService userService;@GetMapping("/user/login")public Map<String, Object> login(User user) {log.info("用戶名:{}", user.getName());log.info("password: {}", user.getPassword());Map<String, Object> map = new HashMap<>();try {User userDB = userService.login(user);Map<String, String> payload = new HashMap<>();payload.put("id", userDB.getId());payload.put("name", userDB.getName());String token = JWTUtils.getToken(payload);map.put("state", true);map.put("msg", "登錄成功");map.put("token", token);return map;} catch (Exception e) {e.printStackTrace();map.put("state", false);map.put("msg", e.getMessage());map.put("token", "");}return map;}@PostMapping("/user/test")public Map<String, Object> test(HttpServletRequest request) {String token = request.getHeader("token");DecodedJWT verify = JWTUtils.verify(token);String id = verify.getClaim("id").asString();String name = verify.getClaim("name").asString();log.info("用戶id:{}", id);log.info("用戶名: {}", name);//TODO 業務邏輯Map<String, Object> map = new HashMap<>();map.put("state", true);map.put("msg", "請求成功");return map;}}
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new JWTInterceptor()).addPathPatterns("/user/test").excludePathPatterns("/user/login");}
}
@Slf4j
public class JWTInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception {//獲取請求頭中的令牌String token = request.getHeader("token");log.info("當前token為:{}", token);Map<String, Object> map = new HashMap<>();try {JWTUtils.verify(token);return true;} catch (SignatureVerificationException e) {e.printStackTrace();map.put("msg", "簽名不一致");} catch (TokenExpiredException e) {e.printStackTrace();map.put("msg", "令牌過期");} catch (AlgorithmMismatchException e) {e.printStackTrace();map.put("msg", "算法不匹配");} catch (InvalidClaimException e) {e.printStackTrace();map.put("msg", "失效的payload");} catch (Exception e) {e.printStackTrace();map.put("msg", "token無效");}map.put("state", false);//響應到前臺: 將map轉為jsonString json = new ObjectMapper().writeValueAsString(map);response.setContentType("application/json;charset=UTF-8");response.getWriter().println(json);return false;}
}
總結
以上是生活随笔為你收集整理的springboot整合JWT使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JWT具体包含信息
- 下一篇: RDBMS 与 非RDBMS