Spring Cloud出现Options Forbidden 403问题解决方法

 更新时间:2017年11月07日 09:42:38   作者:1CSH1  
本篇文章主要介绍了Spring Cloud出现Options Forbidden 403问题解决方法,具有一定的参考价值,有兴趣的可以了解一下

摘要:本文简述了博主在开发过程中,需要跨域调试的时候,出现了 OPTIONS 请求 Forbidden 的问题,以及解决方法。

403 Forbidden 解释:

Forbidden
You don't have permission to access / on this server.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.

403 Forbidden 是HTTP协议中的一个状态码(Status Code)。可以简单的理解为没有权限访问此站点。

问题

在使用 Spring Cloud 的项目中,本地跨域调试发现 POST 请求转为了 OPTIONS 请求,并且服务端拒绝访问,其实是 CORS 请求的问题。

CORS 请求分为2类: 简单请求 和 非简单请求。两者主要的区分点在于:

1: 请求方法为 HEAD, GET, POST;

2: HTTP 头信息为以下几个: Accept, Accept-Language,Content-Language, Last-Event-ID,Content-Type (值为 application/x-www-form-urlencoded、multipart/form-data、text/plain)。

只要满足以上两点,则为简单请求;否则为非简单请求。

简单请求的处理方式是浏览器直接发送 CORS 请求。非简单请求的处理方式是浏览器发送预检请求,表示询问服务器当前的域名是否可以访问正常服务器,如果可以访问,则发送正常的请求到服务器;否则报错。

现在确定遇到的问题就是在 CORS 请求预检的时候发现域名不在服务器端的白名单里面,所以需要修改服务端的请求返回报文。

解决方案

在网关中添加下面的过滤器,在每次请求返回报文中添加报文头,即可正常访问

@Component
public class CorsFilter implements Filter {

  @Override
  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    response.setHeader("Access-Control-Expose-Headers", "Location");
    chain.doFilter(req, res);
  }

  @Override
  public void init(FilterConfig filterConfig) {}

  @Override
  public void destroy() {}

}


参考文章:

跨域资源共享 CORS 详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 设计模式之构建(Builder)模式 建造房子实例分析

    设计模式之构建(Builder)模式 建造房子实例分析

    构建模式主要用来针对复杂产品生产,分离部件构建细节,以达到良好的伸缩性,考虑到设计模式来源于建筑学,因此举一个建造房子的例子,需要的朋友可以参考下
    2012-12-12
  • 一文带你玩转Java异常处理

    一文带你玩转Java异常处理

    这篇文章主要为大家介绍一下Java中的异常处理机制,文中通过示例为大家进行了详细的介绍,对我们学习有一定的帮助,感兴趣的可以了解一下
    2022-08-08
  • mybatis使用foreach踩坑及解决

    mybatis使用foreach踩坑及解决

    这篇文章主要介绍了mybatis使用foreach踩坑及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • java以json格式向后台服务器接口发送请求的实例

    java以json格式向后台服务器接口发送请求的实例

    下面小编就为大家分享一篇java以json格式向后台服务器接口发送请求的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Java实战之简单的文件管理器

    Java实战之简单的文件管理器

    这篇文章主要介绍了Java实战之简单的文件管理器,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Java二维数组查找功能代码实现

    Java二维数组查找功能代码实现

    这篇文章主要介绍了Java二维数组查找功能代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • SpringBoot拦截器如何获取http请求参数

    SpringBoot拦截器如何获取http请求参数

    这篇文章主要给大家介绍了SpringBoot拦截器如何获取http请求参数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • java核心编程之文件过滤类FileFilter和FilenameFilter

    java核心编程之文件过滤类FileFilter和FilenameFilter

    这篇文章主要为大家详细介绍了java文件过滤类FileFilter和FilenameFilter,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Java中的引用类型和使用场景详细

    Java中的引用类型和使用场景详细

    这篇文章介绍的是Java中的引用类型和使用场景,主要内容展开Java中的引用类型,有强引用、软引用 、弱引用、虚引用,需要的朋友可以参考一下
    2021-10-10
  • JAVA微信扫码支付模式二线上支付功能实现以及回调

    JAVA微信扫码支付模式二线上支付功能实现以及回调

    本篇文章主要介绍了JAVA微信扫码支付模式二线上支付功能实现以及回调,这里整理了详细的代码,有需要的小伙伴可以参考下。
    2016-11-11

最新评论