阿里云服务器CentOS(Linux系统)配置基于Tomcat的GeoServer(以2.15.1版本为例)跨域问题记录。
1、下载 jetty-servlets.jar包,2.15.0对应的版本是 jetty-servlets-9.4.12.v20180830.jar,放在

\geoserver\WEB-INF\lib

注意: jetty-servlets.jar包匹配版本的 jetty-http-9.4.12.v20180830.jar 和 jetty-util-9.4.12.v20180830.jar包
及所有依赖包
jetty-server-9.4.12.v20180830.jar、
jetty-jmx-9.4.12.v20180830.jar、
jetty-security-9.4.12.v20180830.jar、
jetty-servlet-9.4.12.v20180830.jar、
jetty-xml-9.4.12.v20180830.jar、
javax.servlet-api-3.1.0.jar、
jetty-continuation-9.4.12.v20180830.jar、
jetty-io-9.4.12.v20180830.jar、
jetty-webapp-9.4.12.v20180830.jar,
如果没有也要一起下载,同样放在lib目录,
备注:所有jar包下载地址:https://mvnrepository.com/,此网点能查到依赖包匹配版本。
2、修改GeoServer配置文件web.xml,该配置文件的路径如下

\webapps\geoserver\WEB-INF\web.xml

3、修改配置文件web.xml步骤,搜索:cross-origin,将注释的部分解注

<!-- Uncomment following filter to enable CORS -->
   <filter>
        <filter-name>cross-origin</filter-name>
        <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
       <init-param>
           <param-name>chainPreflight</param-name>
           <param-value>false</param-value>
       </init-param>
       <init-param>
           <param-name>allowedOrigins</param-name>
           <param-value>*</param-value>
       </init-param>
       <init-param>
           <param-name>allowedMethods</param-name>
           <param-value>GET,POST,PUT,DELETE,HEAD,OPTIONS</param-value>
       </init-param>
       <init-param>
           <param-name>allowedHeaders</param-name>
           <param-value>*</param-value>
       </init-param>
    </filter>
    
    
    <!-- Uncomment following filter to enable CORS  -->
    <filter-mapping>
        <filter-name>cross-origin</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

4、重启geoserver,如果报错,再次核对匹配版本的依赖jar包是否全部下载。确保所有jar包全部下载并放在lib目录,再次重启即可。
5、如果出现Strict-origin-when-cross-origin跨域问题(参考:https://www.kuangstudy.com/bbs/1374188590124240897)
问题详情:
后端接口通过网关可以访问成功,前端报接口跨域问题
解决原因:
这个问题的原因是在于服务器端设置了两次跨域,只需要设置一次就可以。
有可能是Nginx/Gateway设置了一次,服务端代码又设置了一次。
我的情况是这样的,服务端采用的是SpringCloud,在GateWay网关里面全局设置了跨域,但是在被调的那个微服务项目里还有个跨域设置,导致前台在访问服务端的时候服务端一共跨域了两次,所以出现了这个问题。
解决方法:
只需要将微服务项目的那个删掉即可

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐