关于 ajax 报错

No 'Access-Control-Allow-Origin' ........

这个坑我已经踩了很多很多次了

百度清一色是jsoup解决方案,不是万全之策

我通过springboot 拦截器,给controller加http头来允许部分情况的跨域

例如我的api是在www.tczmh.club,请求的位置是bz.tczmh.club

所以理论上只要把bz.tczmh.club加入允许的范畴,就可以了

每个controller都写一遍太蠢了,发一个Springboot拦截器的实现过程


注册拦截器 默认拦截所有请求就用/**

  1. import com.tczmh.service.Interceptor.HeaderHandlerInterceptor;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  5. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  6.  
  7. @Configuration
  8. public class WebAppConfig implements WebMvcConfigurer {
  9.  
  10. @Autowired
  11. private HeaderHandlerInterceptor headerHandlerInterceptor;
  12. @Override
  13. public void addInterceptors(InterceptorRegistry registry) {
  14. // 注册拦截器
  15. registry.addInterceptor(headerHandlerIntercepto).addPathPatterns("/**");
  16. }


拦截器具体实现类

  1. import org.springframework.stereotype.Component;
  2. import org.springframework.web.servlet.HandlerInterceptor;
  3. import org.springframework.web.servlet.ModelAndView;
  4.  
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7.  
  8. @Component
  9. public class HeaderHandlerInterceptor implements HandlerInterceptor {
  10.  
  11. @Override
  12. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
  13. // 这是要放行通过的域名 如果不限制用一个 * 也可以,就是不安全
  14. response.addHeader("Access-Control-Allow-Origin", "http://bz.tczmh.club");
  15. // 允许的方法 例如GET POST PUT DELETE,只要放行用过的
  16. response.addHeader("Access-Control-Request-Method", "POST");
  17. // 这个对应的是ajax里设置了header,例如存了token 或者 ontentType: "application/json"
  18. response.addHeader("Access-Control-Allow-Headers", "Content-Type");
  19. return true;
  20. }
  21.  
  22. @Override
  23. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
  24.  
  25. }
  26.  
  27. @Override
  28. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
  29.  
  30. }
  31. }

另外ajax调用如果用二级域名也有问题 会404,最好直接写全域名

  1. $.ajax({
  2. url:"http://tczmh.club/service/bz/bzContact",
  3. type:"post",
  4. .........
  5. });


ok。。。。