解决跨域问题

一、跨域问题

在 Web 开发中,一个网页的 JavaScript 代码通过 AJAX 请求后端服务器接口时,如果请求的目标地址与当前页面的地址不在同一个域(域名、端口或协议任何一项不同),就会产生跨域问题。这种情况下,根据浏览器的安全机制(同源策略)就会会限制页面的跨域请求,以防止恶意网站对其他网站的访问和操作,保护用户信息安全。

二、解决方案(常用)

1、在Controller层加上@CrossOrigin 注解

2、自定义 WebMvcConfigurer

java 复制代码
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 对所有路径生效
                .allowedOrigins("*") //允许所有源地址
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的请求方法
                .allowedHeaders("*"); // 允许的请求头
    }
}

3、使用 Filter 进行跨域配置

java 复制代码
@Component
public class CorsFilter implements Filter {
 
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // 将 ServletResponse 转换为 HttpServletResponse
        HttpServletResponse httpResponse = (HttpServletResponse) response;
 
        // 设置允许跨域请求的源地址
        httpResponse.setHeader("Access-Control-Allow-Origin", "*");
        
        // 设置允许的请求方法
        httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        
        // 设置允许的请求头
        httpResponse.setHeader("Access-Control-Allow-Headers", "*");
        
        // 继续执行 Filter 链
        chain.doFilter(request, response);
    }
}
相关推荐
zfj3214 分钟前
从源码层面解析一下ThreadLocal的工作原理
java·开发语言·threadlocal
墨笔之风6 分钟前
java后端根据双数据源进行不同的接口查询
java·开发语言·mysql·postgres
程序猿阿伟16 分钟前
《Python复杂结构静态分析秘籍:递归类型注解的深度实践指南》
java·数据结构·算法
黑白极客1 小时前
怎么给字符串字段加索引?日志系统 一条更新语句是怎么执行的
java·数据库·sql·mysql·引擎
爬山算法1 小时前
Hibernate(32)什么是Hibernate的Criteria查询?
java·python·hibernate
码农水水1 小时前
中国邮政Java面试:热点Key的探测和本地缓存方案
java·开发语言·windows·缓存·面试·职场和发展·kafka
a程序小傲1 小时前
小红书Java面试被问:TCC事务的悬挂、空回滚问题解决方案
java·开发语言·人工智能·后端·python·面试·职场和发展
短剑重铸之日1 小时前
《SpringBoot4.0初识》第五篇:实战代码
java·后端·spring·springboot4.0
heartbeat..1 小时前
Spring MVC 全面详解(Java 主流 Web 开发框架)
java·网络·spring·mvc·web
-西门吹雪2 小时前
c++线程之std::async浅析
java·jvm·c++