草稿里放了很久,把这个以前写的小项目捞出来。
拦截操作出现跨域请求失败
public class XXXXXInterceptor implements HandlerInterceptor {
@Autowired
private XXXServiceImpl xxxService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println(request.getRequestURI());
System.out.println(request.getMethod());
System.out.println(handler);
System.out.println(handler.getClass());
System.out.println("-----------------------------");
//看输出,是先有预请求,预请求是OPTIONS,不是get,被拦截
//下面这个判断是解决办法
if (!(handler instanceof HandlerMethod)){
return true;
}
String token = request.getHeader("token");
UserInfo user = xxxService.getUserByToken(token);
if (user == null){
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(JSON.toJSONString(xxxxx));
return false;
}
return true;
}
}
/users/currentUser
OPTIONS
org.springframework.web.servlet.handler.AbstractHandlerMapping$PreFlightHandler@7bc7d301
class org.springframework.web.servlet.handler.AbstractHandlerMapping$PreFlightHandler
-----------------------------
/users/currentUser
GET
xxxxx.controller.xxxController#currentUser(HttpServletRequest)
class org.springframework.web.method.HandlerMethod
-----------------------------
所以
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public XXXXXInterceptor xxxxxInterceptor() {
return new XXXXXInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(xxxxxInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/Todo/Todo")
.excludePathPatterns("/Todo/Todo");
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
//重写父类提供的跨域请求处理的接口
public void addCorsMappings(CorsRegistry registry) {
//Todo
}
};
}
}
如有错误,还请多多指教!
转载或者引用本文内容请注明来源及原作者:橘足轻重;