正在加载中,请稍后
author 首页 关于 笔记

按回车搜索更多

SpringBoot 拦截器 解决Ajax跨域问题 No 'Access-Control-Allow-Origin' ........
2018-08-18 阅读 {{counts.readCount}} 评论 {{counts.commentCount}}


关于 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。。。。




提交
评论区空空如也,赶紧添加一条评论吧 评论 {{counts.commentCount}}
{{comment.name}} {{comment.os}} {{comment.browser}}
{{dateFormatter(comment.createTime)}}

{{comment.message}}

{{comment.reply.name}} {{comment.reply.os}} {{comment.reply.browser}}
{{dateFormatter(comment.reply.createTime)}}

{{comment.reply.message}}

zzzmh
关于我 留言板

网址导航

{{alert.message}}
留言板 * 站长不经常查看信箱 若有重要事宜联系邮箱 admin@zzzmh.cn 取消 发送