SpringBoot环境下解决CORS跨域问题

跨域问题

SpringBoot开发环境

首先解释一下为什么会有这个问题,
我们平常在写程序的时候基本上都是写的“单机程序”,也就是所有的代码和资源都可以使用同一个ip:port访问到。那么当前端页面需要发送请求给另外一个ip:port下的程序进行处理的时候,就跨域了。

那么有的小伙伴可能会问了,为什么我用postman去请求接口的时候就可以访问成功呢?
因为用postman的话你就直接去访问接口了啊,而没有从一个ip下的资源去请求另外一个ip下的接口

接着是解决办法,可以在前端解决也可以在后端解决,但是推荐在后端解决,因为如果在前端解决的话,前端每次向后端请求接口的时候都需要在请求头中去添加Access-Control-Allow-Origin、Access-Control-Allow-Credentials等参数,太过麻烦 而且安全性也欠佳。

以下贴出后端解决的代码

@WebFilter
public class CorsFilter implements Filter {

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

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpServletRequest request = (HttpServletRequest)servletRequest;

        //请求来源站点
        String origin = request.getHeader("Origin");

        if (!(("").equals(origin) || origin == null)){
            //修改响应体,设置跨域请求可通过
            response.setHeader("Access-Control-Allow-Origin", origin);
            response.setHeader("Access-Control-Allow-Credentials", "true");
            response.setHeader("Access-Control-Allow-Headers", "content-type, x-requested-with");
            response.setHeader("Access-Control-Allow-Methods", "GET,HEAD,POST");
            response.setHeader("Access-Control-Max-Age", "1800");
            response.setHeader("Allow","GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH");
        }
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }

}

意思是,所有的web请求都先进行拦截,然后在doFilter方法中给请求添加上跨域请求所需要的请求头。

请注意
一定要在启动类上添加注解 @ServletComponentScan
否则springboot不会对 @WebFilter 注解进行扫描!

最后,如果有问题还请指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值