Spring Boot 配置CROS Filter
一、什么是CORS?
CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing),允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
它通过服务器增加一个特殊的Header[Access-Control-Allow-Origin]来告诉客户端跨域的限制,如果浏览器支持CORS、并且判断Origin通过的话,就会允许XMLHttpRequest发起跨域请求。
CORS Header
- Access-Control-Allow-Origin: http://www.xxx.com
- Access-Control-Max-Age:86400
- Access-Control-Allow-Methods:GET, POST, OPTIONS, PUT, DELETE
- Access-Control-Allow-Headers: content-type
- Access-Control-Allow-Credentials: true
含义解释:
二、SpringBoot跨域请求处理方式
方式一、直接采用SpringBoot的注解@CrossOrigin(也支持SpringMVC)
Controller层在需要跨域的类或者方法上加上该注解即可
实战:
备注说明:Spring 版本必须大于等于4.2
方法二、处理跨域请求的Configuration
增加一个配置类CrossOriginConfig.java。继承WebMvcConfigurerAdapter或者实现WebMvcConfigurer接口
实战:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/*** AJAX请求跨域*/
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {static final String ORIGINS[] = new String[] { "GET", "POST", "PUT", "DELETE" };@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allowedMethods(ORIGINS).maxAge(3600);}
方法三、采用过滤器(filter)的方式(推荐)
增加一个CORSFilter 类,并实现Filter接口即可
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;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;/*** * @ClassName: CorsFilter * @Description: SpringBoot 跨域处理拦截器*/@Component
public class CROSFilter implements Filter {public static final Logger logger = LoggerFactory.getLogger(CROSFilter.class);@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)throws IOException, ServletException {HttpServletResponse response = (HttpServletResponse) res; HttpServletRequest reqs = (HttpServletRequest) req; /** 跨域设置允所有请求跨域 * 如果允许指定的客户端跨域设置: http://127.0.0.1:8020*/response.setHeader("Access-Control-Allow-Origin","*"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Content-Type"); if (((HttpServletRequest) req).getMethod().equals("OPTIONS")) {response.getWriter().println("ok");return;}chain.doFilter(req, res); }@Overridepublic void destroy() {// TODO Auto-generated method stub}}
解决遇到的错误
1、Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.
解决办法:
response.setHeader("Access-Control-Allow-Headers", "Content-Type");
2、Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
解决办法:
if (((HttpServletRequest) req).getMethod().equals("OPTIONS")) {response.getWriter().println("ok");return;}
Spring Boot 配置CROS Filter相关推荐
- 在Spring boot 配置过滤器(filter)
在spring boot 配置servlet filter 逻辑上与配置spring 是一样的. 不过相比spring 更加简化配置的难度. 这里只需要两步 1 创建一个自定义顾虑器并继承spring ...
- spring boot 配置多个Filter过滤器
spring boot 配置Filter过滤器 1.通过 @WebFilter 注解来配置filet过滤器 @Component @WebFilter(urlPatterns = "/2/* ...
- spring boot配置logback日志
spring boot配置logback日志 在上一篇spring boot入门里提过,Spring Boot默认的日志打印是logback,所以配置logback日志会很简单,但是也有注意的地方. ...
- spring boot配置druid(德鲁伊)
spring boot配置druid(德鲁伊) 关于druid的介绍请看 阿里巴巴温少访谈 1.引入相关依赖,全部依赖是上一篇spring boot+mybatis依赖的基础上,再加上下边的依赖,如下 ...
- spring boot配置详情
spring boot配置详情如下: 1.MVC相关 mvc spring.mvc.async.request-timeout设定async请求的超时时间,以毫秒为单位,如果没有设置的话,以具体 ...
- Spring Boot 配置元数据指南
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 遗失的拂晓 来源 | 公众号「锅外的大佬」 1. 概览 在编写 Spring Bo ...
- java多个数据库数据进行访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码...
之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...
- Spring Boot 配置随机数那些小技巧
转载自 Spring Boot 配置随机数那些小技巧 Spring Boot支持在系统加载的时候配置随机数. 添加config/random.properties文件,添加以下内容: #随机32位M ...
- 19年8月 字母哥 第三章 spring boot 配置原理实战 用热点公司网不行
第三章 spring boot 配置原理实战 3.1.结合配置加载讲解bean自动装配原理 3.2.详解YAML语法及占位符语法 3.3.获取自定义配置的两种实现方法 3.4.配置文件注入值数据校验 ...
最新文章
- 没想到我提前56年感受了赛博朋克
- python第七关再来一盘_Python爬虫自学系列(七) — 项目实战篇(一)
- python中的引用_Python中的引用
- ClickHouse 在字节跳动广告场景的应用
- spring boot应用启动原理分析
- Python基础教程:为元组中的每一个元素命名
- 配置 VIM 英语字典
- MyEclipse中导入Spring 4.0源码
- jQuery中bind,live,delegate与one方法的用法及区别
- https post 报400地址匹配不正确_如何发布领英动态post/article?
- linux 如何查看fb中分辨率_Ubuntu: Linux下查看本机显示器分辨率(xrandr)
- Java中只存在值传递
- java digester_Digester学习笔记(一)
- 说说程序员不解风情的瞬间
- 微信小程序开通直播的条件
- 用例图(use case diagram)
- edg击败we视频_LPL夏季赛:EDG零封V5获三连胜 OMG2-1击败WE
- DB2性能调整优化问题
- 架构 - 单点登录 - Springboot 模拟单点登录
- 关于工业线阵相机的一些知识
热门文章
- 四大组件之Service(四)-Service的线程、工作线程、权限及系统Service
- 软件测试基础知识(二)------------等价类划分法、边界值分析法、场景法、错误推测法、bug定义/类型/优先级/生命周期/跟踪管理
- Android6.0 mtk去除原生相机设置中的选项
- 如何获取无人机航空摄影测绘成果?
- oracle metalink获取,Oracle的MetaLink使用
- 目标检测算法的评价指标
- JVM 上篇之内存与垃圾回收(个人笔记,勿看)
- 什么是segmented control
- word删除脚注之后的空白行怎么删除
- 漫画:架构师是吧?什么是哈希轮?