package com.huimv.admin.config;
import com.alibaba.fastjson.JSONObject;
import com.huimv.admin.common.token.TokenConstant;
import com.huimv.admin.common.token.TokenSign;
import io.jsonwebtoken.Claims;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
/**
*
* jwt拦截器
*
*wo
* @since 2021/4/19
*/
public class JWTInterceptor implements HandlerInterceptor {
//
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 如果不是映射到方法,则直接通过
if (!(handler instanceof HandlerMethod)) {
return true;
}
response.setContentType("application/json;charset=utf-8");
// 获取token
String token = request.getHeader("accessToken");
if (null == token) {
Map map = new HashMap<>();
map.put("data", "token is null");
map.put("code", "401");
response.setStatus(401);
response.getWriter().write(JSONObject.toJSONString(map));
return false;
} else {
Claims claims = TokenSign.getClaims(token);
if (claims == null) {
Map map = new HashMap<>();
map.put("data", "token is overdue");
map.put("code", "403");
response.setStatus(403);
response.getWriter().write(JSONObject.toJSONString(map));
return false;
}
boolean result = TokenSign.verify(token);
if (result) {
//更新存储的token信息
TokenConstant.updateTokenMap(token);
return true;
}
Map map = new HashMap<>();
map.put("data", "token is null");
map.put("code", "401");
response.setStatus(401);
response.getWriter().write(JSONObject.toJSONString(map));
return false;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}