|
@@ -5,12 +5,15 @@ import com.auth0.jwt.exceptions.AlgorithmMismatchException;
|
|
|
import com.auth0.jwt.exceptions.SignatureVerificationException;
|
|
|
import com.auth0.jwt.exceptions.TokenExpiredException;
|
|
|
import com.zzys.lightting.utils.JWTUtil;
|
|
|
+import io.swagger.models.HttpMethod;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.web.method.HandlerMethod;
|
|
|
import org.springframework.web.servlet.HandlerInterceptor;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.lang.reflect.Method;
|
|
|
import java.util.HashMap;
|
|
|
|
|
|
/**
|
|
@@ -19,39 +22,48 @@ import java.util.HashMap;
|
|
|
* @date 2021/12/2821:48
|
|
|
*/
|
|
|
@Slf4j
|
|
|
-//@Component
|
|
|
+@Component
|
|
|
public class JWTInterceptor implements HandlerInterceptor {
|
|
|
|
|
|
@Override
|
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
|
HashMap<String, Object> resultJson = new HashMap<>();
|
|
|
- String uri = request.getRequestURI();
|
|
|
- log.info("请求uri:" + uri);
|
|
|
+ final String url = request.getRequestURI();
|
|
|
+ log.info("url-------------------"+url);
|
|
|
+ // 从http请求头中取出token
|
|
|
+ final String token = request.getHeader(JWTUtil.AUTH_HEADER_KEY);
|
|
|
+ //如果不是映射到方法,直接通过
|
|
|
+ if(!(handler instanceof HandlerMethod)){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ //如果是方法探测,直接通过
|
|
|
+ if (HttpMethod.OPTIONS.equals(request.getMethod())) {
|
|
|
+ response.setStatus(HttpServletResponse.SC_OK);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ //如果方法有JwtIgnore注解,直接通过
|
|
|
+ HandlerMethod handlerMethod = (HandlerMethod) handler;
|
|
|
+ Method method=handlerMethod.getMethod();
|
|
|
+// if (method.isAnnotationPresent(JwtIgnore.class)) {
|
|
|
+// JwtIgnore jwtIgnore = method.getAnnotation(JwtIgnore.class);
|
|
|
+// if(jwtIgnore.value()){
|
|
|
+// return true;
|
|
|
+// }
|
|
|
+// }
|
|
|
//获取请求头token
|
|
|
try {
|
|
|
- String token = request.getHeader("Authorization");
|
|
|
- if(StringUtils.isEmpty(token)) {
|
|
|
+ //LocalAssert.isStringEmpty(token, "token为空,鉴权失败!");
|
|
|
+ if (StringUtils.isEmpty(token)){
|
|
|
resultJson.put("code", HttpServletResponse.SC_UNAUTHORIZED);
|
|
|
- resultJson.put("msg", "无效签名信息");
|
|
|
- String s = JSON.toJSONString(resultJson);
|
|
|
- response.setContentType("application/json;charset=UTF-8");
|
|
|
- response.getWriter().println(s);
|
|
|
- return false;
|
|
|
+ resultJson.put("msg", "token为空,鉴权失败!");
|
|
|
+ }else {
|
|
|
+ //验证,并获取token内部信息
|
|
|
+ String userToken = JWTUtil.verifyToken(token);
|
|
|
+ log.info("token= "+userToken);
|
|
|
+ //将token放入本地缓存
|
|
|
+ //WebContextUtil.setUserToken(userToken);
|
|
|
+ return true;
|
|
|
}
|
|
|
- String[] len = token.split(" ");
|
|
|
- if (len.length >1){
|
|
|
- token = len[1];//以空格划分Bearer token,获取token
|
|
|
- JWTUtil.verify(token);//验证令牌
|
|
|
- return true; //放行
|
|
|
- } else if (len.length==1) {
|
|
|
- token = len[0];//以空格划分Bearer token,获取token
|
|
|
- JWTUtil.verify(token);//验证令牌
|
|
|
- return true; //放行
|
|
|
- } else {
|
|
|
- resultJson.put("code", HttpServletResponse.SC_UNAUTHORIZED);
|
|
|
- resultJson.put("msg", "无效签名信息");
|
|
|
- }
|
|
|
-
|
|
|
} catch (SignatureVerificationException e) {
|
|
|
e.printStackTrace();
|
|
|
resultJson.put("code", HttpServletResponse.SC_UNAUTHORIZED);
|