前后端分离项目跨域问题解决方案

news/2024/12/22 19:39:35/

一、CorsFilter 代码解读

@Component

这个类被标记为Spring组件,表示它将由Spring容器进行管理。

@Order(Ordered.HIGHEST_PRECEDENCE)

这个注解表明这个组件的加载顺序,Ordered.HIGHEST_PRECEDENCE表示最高优先级,将在其他过滤器之前执行。

@WebFilter("/*")

这个注解表示这是一个Servlet过滤器,并指定它将拦截所有的请求路径。

public class CorsFilter implements Filter {

定义了名为CorsFilter的类,实现了Filter接口,用于处理CORS(跨域资源共享)。

    @Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

这是Filter接口的方法之一,表示过滤器要执行的实际操作。

        HttpServletResponse httpServletResponse = (HttpServletResponse) response;

ServletResponse强制类型转换为HttpServletResponse,以便设置HTTP响应头。

        httpServletResponse.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");httpServletResponse.setHeader("Access-Control-Allow-Headers", "x-requested-with");httpServletResponse.setHeader("Access-Control-Max-Age", "3600");

这里设置了CORS相关的HTTP响应头,允许来自http://localhost:8080的跨域请求,支持的方法有POST、GET、OPTIONS和DELETE,允许的请求头是"x-requested-with",设置了最大响应缓存时间为3600秒。

        chain.doFilter(request, response);

继续处理过滤器链,将请求传递给下一个过滤器(如果有的话)或目标资源。

    @Overridepublic void init(FilterConfig filterConfig) {}

这是Filter接口的方法之一,用于初始化过滤器,在这里没有实现具体的初始化逻辑。

    @Overridepublic void destroy() {}

这是Filter接口的方法之一,用于销毁过滤器,在这里没有实现具体的销毁逻辑。

二、整体代码

package com.minster.yanapi.common;import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
@WebFilter("/*")
public class CorsFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletResponse httpServletResponse = (HttpServletResponse) response;httpServletResponse.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");httpServletResponse.setHeader("Access-Control-Allow-Headers", "x-requested-with");httpServletResponse.setHeader("Access-Control-Max-Age", "3600");chain.doFilter(request, response);}@Overridepublic void init(FilterConfig filterConfig) {}@Overridepublic void destroy() {}
}

http://www.ppmy.cn/news/1360385.html

相关文章

校招面试Java、springboot、mysql基本问题

这里有一些常见的Java、Spring Boot和MySQL面试问题: Java面试问题: Java中的基本数据类型有哪些?什么是Java中的自动装箱和拆箱?什么是面向对象编程?Java中的面向对象编程有哪些特性?Java中的异常处理机…

redmine旧系统迁移到docker中

redmine旧系统迁移到docker中 起因新的改变安装尝试处理插件问题自己的镜像 起因 旧系统是Linux,迁移redmine可谓是非常麻烦,安装redmine可是一个非人的折磨。 新的改变 使用docker做好一个环境,以后有需要的时候直接使用即可,…

微服务三十五关

1.微服务有什么好处? 微服务优点很多,但是我们通常说一个东西好肯定会跟另一个东西比较, 通常说微服务好会和单体项目进行比较。以下是微服务相对于单体项目的一些显著好处: 首先,让我们讨论单体项目的一些主要缺点&a…

【Web前端笔记11】JavaScript基础与变量

前言 11 JavaScript基础与变量 一、Js简介 1、JavaScript核心部分: 2、有非常广泛的使用领域 3、JavaScript与ECMAScript的关系 4、JavaScript版本 二、JavaScript名词解释 三、变量命名规则 四、变量类型 六大基本数据类型: 1、数字类型 2、…

汽车研发与制造中英文对照

1、技术开发概念和定义 FPDS(Ford Product Development System)福特产品开发系统 threetype chassis 三类底盘 inter-citybus 长途客车 PassengerVehicle 乘用车 MPV(Multi-PurposeVehicle)多用途汽车 SUV(Sports Uti…

队列的基本操作——常见队列的对比分析(c语言完整代码包含注释)

目录 一、队列 1.1基本概念 1.2基本操作 1.3 队列分类 1.3.1带头队列 1.3.2不带头队列 1.3.3 循环带头队列 1.3.4 循环不带头队列 1.3.5 总结 二、代码实现 2.1带头队列 2.2不带头队列 2.3循环带头队列 2.4循环不带头队列 一、队列 1.1基本概念 队列&#xff08…

igolang学习2,golang开发配置国内镜像

go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct

C语言-指针初学速成

1.指针是什么 C语言指针是一种特殊的变量,用于存储内存地址。它可以指向其他变量或者其他数据结构,通过指针可以直接访问或修改存储在指定地址的值。指针可以帮助我们在程序中动态地分配和释放内存,以及进行复杂的数据操作。在C语言中&#…