Spring Boot如何彻底解决跨域问题,五种方案来看看吧
Spring Boot 解决跨域问题的五种方案如下:
全局配置解决跨域
在Spring Boot中,你可以使用
@CrossOrigin
注解在你的Controller上或者使用配置文件来设置跨域访问。@Configuration public class GlobalCorsConfig { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**").allowedOrigins("*"); } }; } }
使用Filter解决跨域
你也可以通过实现Filter接口来解决跨域问题。
@Component public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse res = (HttpServletResponse) response; res.addHeader("Access-Control-Allow-Origin", "*"); res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT"); res.addHeader("Access-Control-Allow-Headers", "Content-Type"); chain.doFilter(request, response); } @Override public void destroy() { // TODO Auto-generated method stub } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
使用Response添加Header解决跨域
在Controller中,你可以直接在Response中添加跨域的Header。
@RequestMapping("/test") public ResponseEntity<String> test(HttpServletResponse response) { response.addHeader("Access-Control-Allow-Origin", "*"); response.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT"); response.addHeader("Access-Control-Allow-Headers", "Content-Type"); return ResponseEntity.ok("test"); }
使用RestTemplate解决跨域
如果你是在Spring Boot中使用RestTemplate进行跨域请求,你可以通过设置HttpComponentsClientHttpRequestFactory来解决跨域问题。
@Bean public RestTemplate restTemplate() { HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); factory.setReadTimeout(5000); factory.setConnectTimeout(15000); return new RestTemplate(factory); }
使用Zuul代理解决跨域
如果你使用Spring Cloud,你可以通过使用Zuul作为代理来解决跨域问题。
评论已关闭