c语言编程笔录

首页 >   > 笔记大全

笔记大全

怎么解决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应用程序中解决跨域问题,使前端和后端可以顺利通信。