springboot解决跨域问题。3种方法 亲测可用!!!

54 阅读1分钟

image.png

1. 在控制器类上加@CrossOrigin

  • 简单粗暴

image.png

2. 实现WebMvcConfigurer类的addCorsMappings方法

@Configuration
public class CorsConfig implements WebMvcConfigurer {
  @Override
  public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")//项目中的所有接口都支持跨域
      .allowedOrigins("*")//所有地址都可以访问,也可以配置具体地址
      .allowCredentials(true)
      .allowedMethods("*")//"GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS"
      .maxAge(3600);// 跨域允许时间
  }
}

这里需要注意:这个文件一定要放在和SpringBootApplication注解文件相同包下。

image.png

  • 我之前是放在和util平级,导致没扫描到,配置无效。
  1. 实现Filter类的doFilter方法
@Slf4j
@Component
public class CORSFilter implements Filter {
  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    System.out.println("11111111111111111111111111222222221111");
    HttpServletResponse response = (HttpServletResponse)servletResponse;
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, client_id, uuid, Authorization");
    response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
    response.setHeader("Pragma", "no-cache");
    filterChain.doFilter(servletRequest,response);
  }
}