一、现象

从fetch说起,用fetch构造一个POST请求。

1 fetch('http://127.0.0.1:8000/api/login', {2 method: "POST",3 headers: ({4 'Content-Type': 'application/x-www-form-urlencoded'

5 }),6 body: "name=" + name + "&password=" +pwd7 }).then((res) = >{8 console.log(res.status);9 returnres.json()10 }).then((data) = >{11 //console.log(data.result)

12 let loginResult =data.result13 if (loginResult == 'ok') {14 dispatch(getSuccess(data.list)) browserHistory.push('/index')15 } else{16 console.log("illegal login in !")17 }18 }).19 catch((e) = >{20 console.log(e.message)21 })

调用的API服务是Spring boot开发的。

这个POST发出去,一切正常。

由于业务需要,我增加一个头字段:Authorization。

fetch请求的代码修改如下:

1 ...2

3 headers: ({4 'Content-Type': 'application/x-www-form-urlencoded',5 'Authorization': '1111111222'

6 }),7 body: "name=" + name + "&password=" +pwd8 }).then((res) = >{9

10 ...

问题出现了,服务器收到一个OPTIONS请求?!

二、原因

这是fetch出于安全性考虑做的一次服务器预查询,而我的服务没有做相应的处理,所以业务处理失败了。

三、解决

方法一:

网上查到的最多的说法就是:

在application.properties文件中增加这一行配置:

spring.mvc.dispatch-options-request=true

遗憾的是,我的环境配置没有生效。

方法二:

手动写一个Filter:

0 @Component

1 public classCorsFilter implements Filter {2 @Override3 public voidinit(FilterConfig filterConfig) throws ServletException {4 //TODO Auto-generated method stub

5 }6

7 @Override8 public voiddoFilter(ServletRequest req, ServletResponse res,9 FilterChain chain) throws IOException, ServletException {10 HttpServletResponse response =(HttpServletResponse) res;11 response.setHeader("Access-Control-Allow-Origin", "*");12 response.setHeader("Access-Control-Allow-Methods",13 "POST, GET, OPTIONS, DELETE");14 response.setHeader("Access-Control-Max-Age", "3600");15 response.setHeader("Access-Control-Allow-Headers",16 "Content-Type, x-requested-with, X-Custom-Header, Authorization");17 chain.doFilter(req, res);18 }19

20 @Override21 public voiddestroy() {22 //TODO Auto-generated method stub

23 }24 }

一点说明:

response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with, X-Custom-Header, Authorization");

配置中的Authorization是和请求中自定义的头部字段是一样的。

通过这个过滤器,fetch后续的POST请求就可以顺利的发出了。

java option请求_Spring boot处理OPTIONS请求相关推荐

  1. php发起options请求_如何避免options请求?

    我用vue-cli做一个后台,要跨域访问微信服务器,获取统计数据 我用axios发送post请求,然后浏览器先发了一个options请求 然后报错: 然后,我看阮一峰的 跨域资源共享 CORS 详解, ...

  2. java默认异常处理_spring boot 默认异常处理的实现

    本周在看陈杰写的自定义异常的微信异常时,使用的是自定义异常状态码和信息,在出错时将他抛出,并用@ExceptionHandler注解定义一个全局异常处理器,根据异常的内容向前台发送状态码和信息,处理异 ...

  3. 为什么post请求前先发一个options 请求?

    不仅仅是fetch,只要你满足以下几种情况,都会去发起一个 Preflighted requests,也就是options请求,参见上面链接. It uses methods other than G ...

  4. springboot jar服务器运行后无法请求_Spring Boot微服务中Chaos Monkey的应用

    有多少人从未在生产环境中遇到系统崩溃或故障?当然,你们每个人迟早都会经历它.如果我们无法避免失败,那么解决方案似乎是将我们的系统维持在永久性故障状态.Chaos Monkey - 这个概念是Netfl ...

  5. springboot jar服务器运行后无法请求_Spring boot、微服务、OAuth、OpenID的爱恨情仇!...

    在本文中,我们学习如何使用Spring boot轻松配置和部署微服务,然后使用OAuth和OpenID保护它们. 在微服务体系架构中,其中较大的应用程序由多个较小的服务组成,每个服务都有自己的目标,它 ...

  6. java+swagger+侵入_Spring boot+Swagger配置无侵入式Restful接口(一)

    最近一直遇到有人问我spring boot +swagger怎么配置无侵入式的restful接口,这段时间一直很忙,没有时间,刚好星期六,趁着休息时间给大家写个demo,在这里我就粘贴一些步骤,具体的 ...

  7. java dsl框架_Spring Boot整合QueryDSL的实现示例

    之前研究Jooq,今天来研究一下搭配JPA的QueryDSL吧. 简介 Querydsl是一个Java开源框架用于构建类型安全的SQL查询语句.它采用API代替拼凑字符串来构造查询语句.可跟 Hibe ...

  8. redis 设置连接数配置修改 java 最大连接数_Spring Boot集成mysql与Redis

    上一篇文章:一分钟解决临时需求,设计一个可热部署的切面 在项目搭建初期,我们便集成了mysql数据库,但是在现代的分布式架构中,往往还需要一种更高访问性能的键值数据库Redis.mysql结合redi ...

  9. java i18n 实现_Spring Boot i18n(国际化)实现

    1. 场景需求 首先,我们要清楚理解自己的需求.在服务国际化场景中一般有两种类型的需求: 产品是 web 项目,在浏览器中访问时能够支持多语言. 服务输出 Api,需要返回的数据支持多语言. 2. 实 ...

最新文章

  1. 图解Transformer(完整版)!
  2. Aduna ClusterMap 的说明
  3. python控制gpio的一段代码抄的
  4. VSCode 自定义html5模板
  5. bzoj2424 [HAOI2010]订货 费用流
  6. 她看:2021年95后女性人群洞察与媒体消费趋势前瞻.pdf(附下载链接)
  7. idp 苹果开发账号续费
  8. js之面向对象编程,封装 继承 多态(详细篇)
  9. 四元数与欧拉角的转换关系
  10. UCOSIII---工程移植
  11. 图像特征与描述(2)
  12. RESTFul API
  13. 手撸springmvc乞丐版
  14. 因式分解用python写程序_使用Python实现质因式分解算法
  15. 人的一生,到底在追求什么呢?
  16. ZZULIOJ:1138: C语言合法标识符
  17. 为什么说阿里云和亚马逊云对比,阿里云的性价比比较低?
  18. 提问:微信网页授权到第三方调用错误、调用微信公众号扫码登陆错误、微信SCOP权限错误或没有权限
  19. Ant design pro入坑指南
  20. 如何写出完美的复试简历?没有科研竞赛经历怎么办?老师喜欢什么样的学生?跨考生?//2021-2-5

热门文章

  1. 数据库SQL Server基本认识
  2. android mp3音量增大,嫌弃安卓音量太小?学会这个技巧,音量扩大双倍
  3. 楚汉之刘邦灭秦java下载_刘邦灭秦之战
  4. 盈利之外,世纪佳缘哪些变化值得关注?
  5. 2020工业互联网平台安全白皮书
  6. Python基础项目:超市商品销售管理系统
  7. e.keyCode和e.which使用
  8. iPad和iPhone各机型屏幕长宽和长宽比
  9. 比较山海鲸数据可视化和Data MAX,谁赢了?
  10. 用“AI核弹”饱和攻击的英伟达,如何赢下AI计算新赛场?