zoukankan      html  css  js  c++  java
  • Servlet与vue-axios交互跨域问题之Access-Control-Allow-Origin' header contains multiple values '*, null', but only one is allowed.

    问题简述:

      使用servlet与vue-axios进行前后端交互时,设置好了跨域,其后因考虑到用户验证问题,在前端请求时加入了请求头如下

    axios.defaults.headers.common['token'] = sessionStorage.getItem("token");
    

      其后,浏览器便报出了如下的错误

    Access to XMLHttpRequest at 'http://127.0.0.1:8081/test' from origin 'null' has been blocked by CORS policy: 
    The 'Access-Control-Allow-Origin' header contains multiple values '*, null', but only one is allowed.

      但是如果去掉添加的token则可以顺利通过,虽然报错的意思比较明显,但是依旧不明白怎么会有多个值呢?加上网上大多博主的意思也是设置了2次跨域,但是只有一个是允许的,可博主们用了比较厉害的Nginx代理,而我这初学者只用了servlet,顶天了加了一个过滤器(Filter)(曾一度窃喜怎么会有这么厉害的过滤器......),所以应该不存在博主们说的Nginx代理使得过滤器重复的问题。

    解决办法:

      百思不得其解之下,突然想起好像servlet可以在web.xml中进行跨域设置,检查了项目下的web.xml,果然在进行过滤器配置的时候,无脑修改了web.xml,如下:

    <!--映射过滤器 -->
    	<filter-mapping>
    		<filter-name>FilterControl</filter-name>
    		<!--“/*”表示拦截所有的请求 -->
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    	<filter>
    		<filter-name>CORS</filter-name>
    		<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    	</filter>
    	<filter-mapping>
    		<filter-name>CORS</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    

      注释掉了下面代码:

    <!-- <filter>
    		<filter-name>CORS</filter-name>
    		<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    	</filter>
    	<filter-mapping>
    		<filter-name>CORS</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
     -->
    

      问题得以解决.......

    设置了两次跨域允许,同时在前端传入了token。

  • 相关阅读:
    Java计算某个日期是一年中的第几天
    k8s-CentOs7.x 搭建集群(1)(kubelet 1.19.2)
    k8s-PV、PVC(7)
    k8s-Volumes(6)
    k8s-Scale、Rolling Update(5)
    k8s-Service介绍(4)
    k8s-部署AspNetCore应用(3)
    k8s-搭建Dashboard(2)
    AspNetcore搭配Serilog利用docker发布CentOs7
    CentOs7 搭建http服务器访问文件目录
  • 原文地址:https://www.cnblogs.com/waterbbro/p/12142060.html
Copyright © 2011-2022 走看看