首先创建一个实现Filter的cors过滤器

import lombok.extern.slf4j.Slf4j;

import org.springframework.context.ApplicationContext;

import java.io.IOException;

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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* 功能描述 cors过滤类
*
* @author duke
* @since 2020-11-19
*/
@Slf4j
public class CorsFilter implements Filter { private static final String DEFAULT_ALLOW_HEADERS =
"Origin,x-cbg-victoria-rolename,X-Requested-With,Content-Type,Accept,client_id,appid,uuid,Authorization,TraceID"
+ ",haehead,traceid,x-app-id,x-service-type,x-cbg-language,x-sub-app-id,x-multi-consumer-appid,x-group"
+ ",trackid,Pragma,Cache-Control,x-honor-victoria-rolename,x-pix-app-type,x-pix-app-url,x-pix-csrf-token"
+ ",x-pix-main-role-code,x-pix-page-url,x-csrf-token"; private ApplicationContext context; /**
* init
*
* @param filterConfig param
* @throws ServletException ex
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException { } /**
* doFilter
*
* @param servletRequest param
* @param servletResponse param
* @param filterChain param
* @throws IOException ex
* @throws ServletException ex
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
log.info("request method:{},url:{},servletPath:{}", request.getMethod(), request.getRequestURL(),
request.getServletPath());
response.setCharacterEncoding("UTF-8"); // 配置来源 '*'
String originHeader = StringVerifyUtil.dealSpecialChar(request.getHeader("Origin"));
log.info("Duke current request origin= {} ", originHeader);
response.setHeader("Access-Control-Allow-Origin", originHeader);
// 允许获取证书
response.setHeader("Access-Control-Allow-Credentials", "true");
// 配置请求方法
response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,PUT");
// 配置请求头,如果有自定义的请求头,必须配置
response.setHeader("Access-Control-Allow-Headers", DEFAULT_ALLOW_HEADERS); response.setHeader("Content-Type", "application/json;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // 支持HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // 支持HTTP 1.0. response.setHeader("Expires", "0");
response.setHeader("Access-Control-Max-Age", "3600"); // 设置过期时间 if ("OPTIONS".equals(request.getMethod())) {
log.info("OPTIONS request, let it response OK to browser.");
response.setStatus(HttpServletResponse.SC_OK);
} else {
filterChain.doFilter(servletRequest, servletResponse);
}
log.info("CorsFilter end------------------------------------------------------ ");
} /**
* destroy
*/
@Override
public void destroy() { } /**
* setContext
*
* @param context param
*/
public void setContext(ApplicationContext context) {
this.context = context;
}
}

然后在框架上注册这个类

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* 功能描述
*
* @author duke
* @since 2020-11-19
*/
@Configuration
public class FilterRegistry { @Autowired
ApplicationContext context; /**
* corsFilterRegistrationBean
*
* @return FilterRegistrationBean
*/
@Bean
public FilterRegistrationBean corsFilterRegistrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
CorsFilter corsFilter = new CorsFilter();
corsFilter.setContext(context);
registrationBean.setFilter(corsFilter);
registrationBean.addUrlPatterns("/*"); // 所有路径请求
registrationBean.setName("CorsFilter");
registrationBean.setOrder(1);
return registrationBean;
}
}

解决CORS跨域问题的更多相关文章

  1. SpringBoot解决cors跨域问题

    1.使用@CrossOrigin注解实现 (1).对单个接口配置CORS @CrossOrigin(origins = {"*"}) @PostMapping("/hel ...

  2. spring boot:解决cors跨域问题的两种方法(spring boot 2.3.2)

    一,什么是CORS? 1,CORS(跨域资源共享)(CORS,Cross-origin resource sharing), 它是一个 W3C 标准中浏览器技术的规范, 它允许浏览器向非同一个域的服务 ...

  3. 解决cors跨域的filter

    import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.Ordered; im ...

  4. 解决ajax请求cors跨域问题

    ”已阻止跨源请求:同源策略禁止读取位于 ***** 的远程资源.(原因:CORS 头缺少 'Access-Control-Allow-Origin').“ ”已阻止跨源请求:同源策略禁止读取位于 ** ...

  5. 关于 Spring Security OAuth2 中 CORS 跨域问题

    CORS 是一个 W3C 标准,全称是”跨域资源共享”(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了 AJA ...

  6. 解决浏览器跨域限制方案之CORS

    一.什么是CORS CORS是解决浏览器跨域限制的W3C标准,详见:https://www.w3.org/TR/cors/. 根据CORS标准的定义,在浏览器中访问跨域资源时,需要做如下实现: 服务端 ...

  7. 如何解决 ajax跨域被阻止 CORS 头缺少 'Access-Control-Allow-Origin'的问题?

    已拦截跨源请求:同源策略禁止读取位于 http://192.168.1.72:8080/securityMonitor_TV/service/getTest 的远程资源. (原因:CORS 头缺少 ' ...

  8. SpringBoot添加Cors跨域配置,解决No 'Access-Control-Allow-Origin' header is present on the requested resource

    目录 什么是CORS SpringBoot 全局配置CORS 拦截器处理预检请求 什么是CORS 跨域(CORS)请求:同源策略/SOP(Same origin policy)是一种约定,由Netsc ...

  9. 解决cookie跨域访问

    一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入c ...

  10. 如何在ASP.NET Core中实现CORS跨域

    注:下载本文的完整代码示例请访问 > How to enable CORS(Cross-origin resource sharing) in ASP.NET Core 如何在ASP.NET C ...

随机推荐

  1. 微信小程序转发onShareAppMessage设置path参数后在onload获取不到值的原因和解决方法

    官方实例:https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html#onShareAppMessage-Obje ...

  2. JDK9对集合添加的优化-Debug追踪

    JDK9对集合添加的优化 通常,我们在代码中创建一个集合(例如,List或Set ),并直接用一些元素填充它.实例化集合,几add方法调用,使得代码重复. package A_Lian_one.dem ...

  3. MATLAB实现随机森林(RF)回归与自变量影响程度分析

      本文介绍基于MATLAB,利用随机森林(RF)算法实现回归预测,以及自变量重要性排序的操作. 目录 1 分解代码 1.1 最优叶子节点数与树数确定 1.2 循环准备 1.3 数据划分 1.4 随机 ...

  4. JSP第一次作业

    1.环境搭建,运行出来一个JSP页面,显式hello <%@ page language="java" import="java.util.*" page ...

  5. 编写antd的Cascader 级联选择组件市级地区数据

    下面是该组件的使用数据的格式 options: [ { value: 'zhejiang', label: 'Zhejiang', children: [ { value: 'hangzhou', l ...

  6. @Slf4j -- lombok.extern.slf4j.Slf4j;

    @Log4j:注解在类上:为类提供一个 属性名为log 的 log4j 日志对像 package com.atguigu.springcloud.controller; import com.atgu ...

  7. JAVA虚拟机09---垃圾回收---经典垃圾回收器

    1.Serial收集器 1.1简介 Serial收集器是最基础.历史最悠久的收集器,曾经(在JDK 1.3.1之前)是HotSpot虚拟机新生代收集器的唯一选择   1.2使用算法 标记-复制算法 1 ...

  8. 多功能游戏工具箱 - Watt Toolkit V4.4

    Watt Toolkit Watt Toolkit 工具箱能够让 Steam 平台的玩家们享受更加出色的游戏体验,工具箱包含多种实用的功能,支持快速切换登录账号,玩家还可以通过这款工具编辑 Steam ...

  9. Opengl ES之踩坑记

    前因 最近在尝试使用Opengl ES实现一些LUT滤镜效果,在实现这些滤镜效果的时候遇到一些兼容性的坑,踩过这些坑后我希望把这几个坑分享给读者朋友们, 希望同在学习Opengl ES的朋友们能少走弯 ...

  10. 视觉十四讲:第七讲_3D-3D:ICP估计姿态

    1.ICP 假设有一组配对好的3D点, \(P={P_{1}, ..., P_{N}}\) , \(P^{'}={P_{1}^{'}, ..., P_{N}^{'}}\). 有一个欧式变换R,t,使得 ...