解决CORS跨域问题
首先创建一个实现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跨域问题的更多相关文章
- SpringBoot解决cors跨域问题
1.使用@CrossOrigin注解实现 (1).对单个接口配置CORS @CrossOrigin(origins = {"*"}) @PostMapping("/hel ...
- spring boot:解决cors跨域问题的两种方法(spring boot 2.3.2)
一,什么是CORS? 1,CORS(跨域资源共享)(CORS,Cross-origin resource sharing), 它是一个 W3C 标准中浏览器技术的规范, 它允许浏览器向非同一个域的服务 ...
- 解决cors跨域的filter
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.Ordered; im ...
- 解决ajax请求cors跨域问题
”已阻止跨源请求:同源策略禁止读取位于 ***** 的远程资源.(原因:CORS 头缺少 'Access-Control-Allow-Origin').“ ”已阻止跨源请求:同源策略禁止读取位于 ** ...
- 关于 Spring Security OAuth2 中 CORS 跨域问题
CORS 是一个 W3C 标准,全称是”跨域资源共享”(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了 AJA ...
- 解决浏览器跨域限制方案之CORS
一.什么是CORS CORS是解决浏览器跨域限制的W3C标准,详见:https://www.w3.org/TR/cors/. 根据CORS标准的定义,在浏览器中访问跨域资源时,需要做如下实现: 服务端 ...
- 如何解决 ajax跨域被阻止 CORS 头缺少 'Access-Control-Allow-Origin'的问题?
已拦截跨源请求:同源策略禁止读取位于 http://192.168.1.72:8080/securityMonitor_TV/service/getTest 的远程资源. (原因:CORS 头缺少 ' ...
- SpringBoot添加Cors跨域配置,解决No 'Access-Control-Allow-Origin' header is present on the requested resource
目录 什么是CORS SpringBoot 全局配置CORS 拦截器处理预检请求 什么是CORS 跨域(CORS)请求:同源策略/SOP(Same origin policy)是一种约定,由Netsc ...
- 解决cookie跨域访问
一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入c ...
- 如何在ASP.NET Core中实现CORS跨域
注:下载本文的完整代码示例请访问 > How to enable CORS(Cross-origin resource sharing) in ASP.NET Core 如何在ASP.NET C ...
随机推荐
- [cocos2d-x]关于Action
Action的分类 第一种:FiniteTimeAction类:有限时间的动作类 第二种:Follow类:节点跟随另一种节点的类 第三种:Speed类:节点执行速度类 第一种有限时间的动作类又分为瞬时 ...
- 10.关于synchronized的一切,我都写在这里了
大家好,我是王有志.关注王有志,一起聊技术,聊游戏,从北漂生活谈到国际风云. 之前我们已经通过3篇文章由浅到深的分析了synchronized的用法和原理: synchronized的基础:synch ...
- 超详细解锁Webpack步骤,踩坑记录
webpack 核心 entry: 入口 output: 输出 loader: 模块转换器,用于把模块原内容按照需求转换成新内容 插件(plugins): 扩展插件,在webpack构建流程中的特定时 ...
- GaussDB(DWS)现网案例:collation报错
摘要:用户创建hash分布表,使用pbe方式执行使用分布列作为查询条件的语句时报错 本文分享自华为云社区<GaussDB(DWS)现网案例之collation报错>,作者: 你是猴子请来的 ...
- 黏包现象、struct模块、并行与并发
1.黏包现象 1.黏包现象产生的背景: 1.1 服务端连续执行三次recv 1.2 客户端连续执行三次send 执行上述操作会发现服务端一次性接收到了客户端三条消息,而后面两次什么都没接收到,该现象称 ...
- Vue13 样式动态绑定
1 class样式的动态绑定 1.1 说明 通过命令v-bind:class设置一个对象,动态切换class.可以简写为:class. class=""可以和:class=&quo ...
- 交叉熵损失CrossEntropyLoss
在各种深度学习框架中,我们最常用的损失函数就是交叉熵,熵是用来描述一个系统的混乱程度,通过交叉熵我们就能够确定预测数据与真实数据的相近程度.交叉熵越小,表示数据越接近真实样本. 1 分类任务的损失计算 ...
- angr初探
前言 在搞fuzz的时候发现了一个比较难以解决的问题.例如if(*buf == "\xde\xad\xbe\xef"),我们如果想通过纯fuzz去进入这个if的分支,那么概率极其微 ...
- 华为云CodeArts Artifact,5大特性守护制品质量与安全
摘要:2023年2月23日,华为云CodeArts Artifact制品仓库服务正式上线,目标进一步赋能企业伙伴与开发者,实现软件作业中可信制品生产与应用活动快速落地,提高软件交付效率与质量. 本文分 ...
- 山石网科HCSA学习笔记
山石HCSA学习笔记 目录 山石HCSA学习笔记 1 山石防火墙基础知识 1.1 基础概念介绍 1.2 介绍StoneOS处理包的Flow过程? 2 系统管理 3 搭建实验环境 4 安全策略 5 NA ...