当前位置: 首页>后端>正文

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

一、CorsFilter 代码解读

@Component

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

@Order(Ordered.HIGHEST_PRECEDENCE)

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

@WebFilter("/*")

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

public class CorsFilter implements Filter {

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

    @Override
    public 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);

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

    @Override
    public void init(FilterConfig filterConfig) {
    }

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

    @Override
    public 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 {

    @Override
    public 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);
    }

    @Override
    public void init(FilterConfig filterConfig) {
    }

    @Override
    public void destroy() {
    }
}


https://www.xamrdz.com/backend/3kx1848624.html

相关文章: