Spring boot处理跨域问题

Spring boot处理跨域问题

方案一

实现WebMvcConfigurer的addCorsMappings方法

java 复制代码
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")
                .allowCredentials(true).maxAge(3600);
    }
}

方案二

通过滤器进行全局设置

java 复制代码
@Component
public class CorsFilter implements Filter {

    static final String OPTIONS = "OPTIONS";

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

        // 允许指定域访问跨域资源
        response.setHeader("Access-Control-Allow-Origin", "*");
        // 允许所有请求方式
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT, HEAD");
        // 有效时间
        response.setHeader("Access-Control-Max-Age", "3600");
        // 允许的header参数
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,satoken");
        
        // 如果是预检请求,直接返回
        if (OPTIONS.equals(request.getMethod())) {
            response.getWriter().print("");
            return;
        }

        chain.doFilter(req, res);
    }

    @Override
    public void init(FilterConfig filterConfig) {
    }

    @Override
    public void destroy() {
    }

}

推荐解决方案

后端项目中配置耦合度较高,建议在nginx中配置。可以在nginx配置文件中加入以下配置:

powershell 复制代码
location / {
        # 配置跨域响应头
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT, HEAD';
        
        # 其他配置...
    }

注意

Access-Control-Allow-Origin 这个参数的值尽量不要设置成'*',会带来安全漏洞。攻击者可以从恶意网站跨域读取受害网站的敏感信息,所以我们需要把值设置为具体的受信任的域。

假设后端接口所在域为 http://blog.zhangsan.com,那么我们就可以把Access-Control-Allow-Origin的值设置为http://blog.zhangsan.com

相关推荐
suuijbd8 分钟前
SpringCloud+Netty集群即时通讯项目
spring boot·分布式·spring cloud·java-rabbitmq·java-zookeeper
陈果然DeepVersion1 小时前
Java大厂面试真题:Spring Boot+Kafka+AI智能客服场景全流程解析(十)
java·spring boot·ai·kafka·面试题·向量数据库·rag
但要及时清醒2 小时前
ArrayList和LinkedList
java·开发语言
一叶飘零_sweeeet2 小时前
从测试小白到高手:JUnit 5 核心注解 @BeforeEach 与 @AfterEach 的实战指南
java·junit
摇滚侠2 小时前
Spring Boot3零基础教程,Reactive-Stream 四大核心组件,笔记106
java·spring boot·笔记
Z3r4y2 小时前
【代码审计】RuoYi-3.0 三处安全问题分析
java·web安全·代码审计·ruoyi-3.0
与遨游于天地2 小时前
Spring解决循环依赖实际就是用了个递归
java·后端·spring
陈果然DeepVersion2 小时前
Java大厂面试真题:Spring Boot+微服务+AI智能客服三轮技术拷问实录(六)
java·spring boot·redis·微服务·面试题·rag·ai智能客服
BeingACoder3 小时前
【SAA】SpringAI Alibaba学习笔记(一):SSE与WS的区别以及如何注入多个AI模型
java·笔记·学习·saa·springai