怎么解决Springboot跨域问题
更新时间:2023-08-19前言
在开发Web应用程序时,我们经常会遇到前后端分离的情况,前端和后端是通过HTTP请求进行通信的。然而,由于浏览器的同源策略限制,当我们在前端页面发起跨域请求时,会受到浏览器的阻止,从而导致请求失败。本文将介绍如何通过使用Spring Boot解决跨域问题。
解决跨域问题的方式
1. 使用CORS(跨域资源共享)
@Configuration public class CorsConfig extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "POST", "PUT", "DELETE") .allowedHeaders("*") .allowCredentials(true) .maxAge(3600); } }
上述代码是一个配置类,通过继承WebMvcConfigurerAdapter类并重写addCorsMappings方法来配置CORS。
2. 使用Filter过滤器
@Component @Order(Ordered.HIGHEST_PRECEDENCE) public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; HttpServletRequest request = (HttpServletRequest) req; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, X-Requested-With"); response.setHeader("Access-Control-Allow-Credentials", "true"); if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { response.setStatus(HttpServletResponse.SC_OK); } else { chain.doFilter(req, res); } } @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void destroy() { } }
总结
通过上述两种方式,我们可以解决Spring Boot中的跨域问题。第一种方式是使用CORS配置类,通过设置allowedOrigins、allowedMethods、allowedHeaders等属性来允许特定的跨域请求。第二种方式是使用Filter过滤器,在doFilter方法中设置响应头的Access-Control-Allow-*属性,以允许跨域请求。
无论使用哪种方式,都可以帮助我们在Spring Boot应用程序中解决跨域问题,使前端和后端可以顺利通信。