使用Jackson进行返回
public class JWTInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
try {
String token = request.getHeader("token");//注意:token要放在请求头中
JWTUtils jwtUtils = new JWTUtils();
jwtUtils.verifyToken(token);
return true;
}catch (SignatureVerificationException e){
e.printStackTrace();
}catch (TokenExpiredException e){
e.printStackTrace();
}catch (AlgorithmMismatchException e){
e.printStackTrace();
}catch (InvalidClaimException e){
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
falseResult(response);
return false;
}
public void falseResult(HttpServletResponse response) throws IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
ResultBody resultBody = new ResultBody(false,null,"没有token");
ObjectMapper objectMapper = new ObjectMapper();
response.getWriter().println(objectMapper.writeValueAsString(resultBody));
return;
}
}
拦截器返回的原理其实是“response直接返回”,如下
public class JWTInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
try {
String token = request.getHeader("token");//注意:token要放在请求头中
JWTUtils jwtUtils = new JWTUtils();
jwtUtils.verifyToken(token);
return true;
}catch (SignatureVerificationException e){
e.printStackTrace();
}catch (TokenExpiredException e){
e.printStackTrace();
}catch (AlgorithmMismatchException e){
e.printStackTrace();
}catch (InvalidClaimException e){
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
response.getWriter().println("interceptor ont allow access!");
return false;
}
被拦截后,响应体显示信息为:
借用Jackson的原因
1:尝试了使用@ResponseBody,发现其只能在@Controller下使用
2:Jackson方便