首先创建一个实现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. yolov5数据集制作 数据集分割+voc格式转txt格式代码

    先上数据集分割代码 网上没找到合适的 自己写了一个 分割比例为0.6 :0.2 :0.2 import os import random oriImgDir = "./change14img ...

  2. Miller-Rabin 与 Pollard-Rho 算法学习笔记

    前言 Miller-Rabin 算法用于判断一个数 \(p\) 是否是质数,若选定 \(w\) 个数进行判断,那么正确率约是 \(1-\frac{1}{4^w}\) ,时间复杂度为 \(O(\log ...

  3. Redis+Hbase+RocketMQ 实际使用问题案例分享

    需求 将Hbase数据,解析后推送到RocketMQ. redis使用list数据类型,存储了需要推送的数据的RowKey及表名. 简单画个流程图就是: 分析及确定方案 Redis 明确list中元素 ...

  4. C Primer Plus (6.16) 編程練習

    /*C Primer Plus (6.15) 6*/ 1 #include<stdio.h> 2 int main() 3 { 4 int i,j; 5 for(int i=0;i< ...

  5. webSocket前端+nodejs后端简单案例多人在线聊天

    一:下面是一个简单的案例,回车发送消息,多人在线聊天 1.前端代码 <!DOCTYPE html> <html> <head> <meta charset=& ...

  6. ant design pro 配置路由 显示页面步骤详解

    第一步 在 src/views 下新建页面的vue文件,如果相关页面有多个,可以新建一个文件夹来放置相关文件. 给页面里写几个字,等会可以看到哦~~ 第二步 将文件加入菜单和路由 进入这个文件    ...

  7. 【分析笔记】全志方案通过命令行操作 GPIO 口(带源码分析)

    前言说明 在项目开发初期,很经常会需要临时操作某个GPIO来验证某些功能,可以通过编写一个简单的驱动程序来操作,但更方便的是可以通过命令行直接操作 GPIO ,这样不需要经过编写代码.编译驱动.推入文 ...

  8. 【Django drf】视图层大总结 ViewSetMixin源码分析 路由系统 action装饰器

    目录 九个视图子类 视图集 继承ModelViewSet类写五个接口 继承 ReadOnlyModelView编写2个只读接口 ViewSetMixin源码分析 查找as_view方法 setattr ...

  9. Redis避坑指南:为什么要有分布式锁?

    作者:京东保险 张江涛 1.为什么要有分布式锁? JUC提供的锁机制,可以保证在同一个JVM进程中同一时刻只有一个线程执行操作逻辑: 多服务多节点的情况下,就意味着有多个JVM进程,要做到这样,就需要 ...

  10. Java Day 2

    标识符 凡是变量中需要自己命名的地方都是标识符,例如:包名.类名.变量名等等 标识符的命名规则 1.Java的标识符只能用26个英文字母大小写,0-9的数字,下划线(_),和美元的符号($). 2.标 ...