Access-Control-Allow-Origin跨域问题

开发模式上想前后端分离,但是在使用axios交换数据的时候,提示Access-Control-Allow-Origin跨域问题,解决方案跟客户端没关系,修改的是服务端,使用cors filter,下面详细介绍调试过程

故障

  • 01

    前端使用axios调用后台链接,请求服务端数据

  • 02

    服务端controller层,使用springMVC方式

  • 03

    请求异常,报错Access-Control-Allow-Origin,经查属于跨域问题,该问题不解决,前后端就不能各自愉快的工作了,因此要想办法解决掉

解决方案-后台

  • 01

    跨域问题属于后台的安全拦截,跟客户端没关系,在java后台,使用cors filter进行拦截处理,引用maven库cors-filter

  • 02

    修改web.xml,增加cors过滤器,在cors.supportedHeaders节点中,增加Access-Control-Allow-Origin,该处也可以改成*

  • 03

    <!-- CORS--><filter>   <filter-name>CORS</filter-name>   <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>   <init-param>      <param-name>cors.allowOrigin</param-name>      <param-value>*</param-value>   </init-param>   <init-param>      <param-name>cors.supportedMethods</param-name>      <param-value>GET, POST, HEAD, PUT, DELETE</param-value>   </init-param>   <init-param>      <param-name>cors.supportedHeaders</param-name>      <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified, Access-Control-Allow-Origin</param-value>   </init-param>   <init-param>      <param-name>cors.exposedHeaders</param-name>      <param-value>Set-Cookie</param-value>   </init-param>   <init-param>      <param-name>cors.supportsCredentials</param-name>      <param-value>true</param-value>   </init-param></filter><filter-mapping>   <filter-name>CORS</filter-name>   <url-pattern>/*</url-pattern></filter-mapping>

  • 04

    cors.allowOrigin:可以通过的ip,*代表所有,可以使用指定的ip,多个的话可以用逗号分隔,默认为* cors.supportedMethods:请求方式 默认为* cors.supportedHeaders:请求支持的头信息,默认为* cors.exposedHeaders:暴露的头信息,默认的empy list cors.supportsCredentials:支持证书,默认为true cors.maxAge: 最大过期时间,默认为-1 cors.tagRequests: 默认为false cors.allowSubdomains:允许子域 默认为false 详细设置,可参考官网:http://software.dzhuvinov.com/cors-filter-configuration.html

  • 05

    服务端修改后,重启tomcat

    解决方案-前端

    • 01

      在headers里面,要加入'Access-Control-Allow-Origin': '*',否则访问依然报错

    (0)

    相关推荐

    • Web安全技术之浏览器的跨域访问

      一、浏览器介绍 对于Web应用来说,浏览器是最重要的客户端。 目前浏览器五花八门多得不得了,除了Chrome、IE、Firefox、Safari、Opera这些国外的浏览器外,百度、腾讯、360、淘宝 ...

    • 跨域调用flash 在浏览器中使用getUrl无法打开简析

      今天做一个黄页搜搜模板的时候遇到一个非常棘手的问题,以前做模板的时候都是默认的程序自动输出栏目,今天遇到个客户想把栏目做成flash以达到绚丽的效果,这一要求,发生了重大的事故,flash传上去了,可 ...

    • Ajax跨域请求COOKIE无法带上的完美怎么解决

      Ajax跨域请求COOKIE无法带上的完美怎么解决

    • chrome谷歌浏览器的跨域设置(包括版本49前后两种设置)

      做前后分离的webapp开发的时候,出于一些原因往往需要将浏览器设置成支持跨域的模式,好在chrome浏览器就是支持可跨域的设置,网上也有很多chrome跨域设置教程.但是新版本的chrome浏览器提 ...

    • 如何解决IE浏览器跨域问题?

      浏览器的不同,跨域解决方式也不同.前一篇讲解了谷歌浏览器的跨域问题,本篇将讲解IE浏览器的跨域问题.IE设置方法与谷歌相比稍微复杂一点. 操作方法 01 打开IE浏览器,在工具菜单下选择Interne ...

    • java 跨域问题的解决方法

      跨域问题是我们在程序开发中常见的问题之一,困扰着很多初级程序员,本文我将介绍集中我在项目开发中遇到的问题. 操作方法 01 第一种情况是后台的跨域请求当我们在两个项目A  B中,当A向B发送AJAX请 ...

    • 怎么解决跨域问题

      跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制. 操作方法 01 解决办法: 1.JSONP: 使用方式就不赘述了,但是要注意JS ...

    • ajax跨域的解决办法

      ajax跨域的解决办法 操作方法 01 1. 什么是跨域请求 我们访问的是第一个域,ajax对象只能请求这个域上的资源,不能请求其它域上的资源 l Ajax技术由于受到浏览器的限制,该方法不允许跨域通 ...

    • ajax如何设置header 跨域

      解决跨域调用服务并设置headers 主要的解决方法需要通过服务器端设置响应头.正确响应options请求,正确设置 JavaScript端需要设置的headers信息 方能实现 操作方法 01 服务 ...