先配置拦截器
import com.auth0.jwt.exceptions.AlgorithmMismatchException;
import com.auth0.jwt.exceptions.InvalidClaimException;
import com.auth0.jwt.exceptions.SignatureVerificationException;
import com.auth0.jwt.exceptions.TokenExpiredException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sxskz.chaoliu.util.TokenUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
//@Component
@Configuration
public class AuthenticationInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object object) throws Exception {
System.out.println("进入拦截器");
httpServletResponse.setHeader("Access-Control-Allow-Origin", "*"); //解决跨域访问报错
httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
httpServletResponse.setHeader("Access-Control-Max-Age", "3600"); //设置过期时间
httpServletResponse.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With,Content-Type, Accept,token,client_id,identify, uuid, Authorization");
httpServletResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // 支持HTTP 1.1.
httpServletResponse.setHeader("Pragma", "no-cache"); // 支持HTTP 1.0. response.setHeader("Expires", "0");
httpServletResponse.setHeader("Access-Control-Expose-Headers","X-forwared-port, X-forwarded-host");
httpServletResponse.setHeader("Vary","Origin,Access-Control-Request-Method,Access-Control-Request-Headers");
String token=httpServletRequest.getHeader("token");
Map<String, Object> map = new HashMap<>();
try {
TokenUtils.verify(token);
return true;
} catch (SignatureVerificationException e) {
e.printStackTrace();
map.put("msg", "签名不一致");
map.put("code",500);
} catch (TokenExpiredException e) {
e.printStackTrace();
map.put("msg", "令牌过期");
map.put("code",500);
} catch (AlgorithmMismatchException e) {
e.printStackTrace();
map.put("msg", "算法不匹配");
map.put("code",500);
} catch (InvalidClaimException e) {
e.printStackTrace();
map.put("msg", "失效的payload");
map.put("code",500);
} catch (Exception e) {
e.printStackTrace();
map.put("msg", "token无效");
map.put("code",500);
}
//根据自己所需选择所需的异常处理
map.put("state", false);
//响应到前台: 将map转为json
String json = new ObjectMapper().writeValueAsString(map);
httpServletResponse.setContentType("application/json;charset=UTF-8");
httpServletResponse.getWriter().println(json);
return false;
}
}
再配置mvc
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/*
* 解决跨域
* */
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
// 设置允许跨域的路径
registry.addMapping("/**")
// 设置允许跨域请求的域名
// .allowedOrigins("*")
.allowedOriginPatterns("*")
// 是否允许证书
.allowCredentials(true)
.allowedMethods("*")
.maxAge(3600);
}
}