SpringBoot简单配置解决跨域问题

本文介绍了两种在SpringBoot项目中处理跨域问题的解决方案。方法一是通过实现Filter接口,设置响应头允许跨域;方法二是利用Spring的CorsFilter配置,允许所有域名、方法和头部进行跨域调用。这两种方法都能有效地解决前后端分离项目中的跨域障碍。
摘要由CSDN通过智能技术生成

在完成一个前后端分离的项目中遇到了跨域问题,现在将这个问题的解决办法记录在案,在自我巩固的同时,也能够帮助有需要的人。


方法一

1、通过JavaWEB中的三大组件之一Filter完成拦截

import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 该Filter起到拦截作用
 * 
 * @author Jenson
 * @since 2020/10/13 21:45
 **/
@Component
public class CORSFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "*");
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }
}

如果是使用Spring的话,就不需要下边的配置,仅仅使用上面的这段代码就行。

2、使用SpringBoot的FilterRegistrationBean将其添加到容器中

@Configuration
public class CORSConfig {

    @Autowired
    private CORSFilter corsFilter;
		
	@Bean
    public FilterRegistrationBean corsFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(corsFilter);
        return bean;
    }

}

方法二:

除了这种配置方式可以解决问题外,Spring也为我们提供了一个更加快捷的组件,我们可以直接做在他的基础上简单些一些配置再将其加入到容器中即可

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * 全局跨域配置
 * 
 * @author Jenson
 * @since 2020/10/13 21:45
 **/
@Configuration
public class GlobalCorsConfig {

    /**
     * 允许跨域调用的过滤器
     */
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        //允许所有域名进行跨域调用
        config.addAllowedOrigin("*");
        //允许跨越发送cookie
        config.setAllowCredentials(true);
        //放行全部原始头信息
        config.addAllowedHeader("*");
        //允许所有请求方法跨域调用
        config.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

大功告成。

对于这样配置的原因,我找到一篇说的比较好的文章,大家需要的可以移步 传送门

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值