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 注解进行扫描!

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

posted @   有锦  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示