GeoServer如何在Tomcat 8.5 中进行跨域

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yatsov/article/details/80167807

GeoServer 的跨域

GeoServer是一款Java系的地理信息服务器,功能强大,但是默认是war包安装的时候没有设置跨域有时候ajax是无法请求道图层数据的所以这里要进行跨域的设置。

这里一定要注意一点!!!!!Tomcat的跨域设置和Jetty的跨域设置时不同的,类名不同的。而Geoserver的文档里写的容器默认是jetty,所以如果里面需要什么关于java容器的设置请自己再查一下对应的自己的容器是咋回事!!!切记。

Tomcat容器设置

来源

Tomcat官方配置文档

CORS Filter

他的原理是在HttpServletResponse对象中添加了Access-Control-*头。这个筛选器还保护了HTTP拆分。如果请求有问题或者不允许那么会返回403 (Forbidden)。下面介绍了配置项:

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

下面是几个initialisation parameters(init-param)(初始化参数)

cors.allowed.origins

允许访问资源的起源列表。可以指定一个*以允许从任何来源访问资源。否则,可以提供逗号分隔的白名单。
例如: http://www.w3.org, https://www.apache.org.
默认: * (谁都行).

cors.allowed.methods

这个用于控制请求的方法,这些方法也会包含在Access-Control-Allow-Methods头中。
例如: GET, POST.
默认: GET, POST, HEAD, OPTIONS

cors.allowed.headers

这个用于控制请求头中所带的项,这个也会在预请求中作为Access-Control-Allow-Headers头的内容。
例如: Origin,Accept.
默认: Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers

cors.exposed.headers

这里面存着允许被暴露来的HTTP请求头,在Access-Control-Expose-Headers头中会显示。
例如: X-CUSTOM-HEADER-PING,X-CUSTOM-HEADER-PONG.
默认: None. Non-simple headers are not exposed by default.

cors.preflight.maxage

这个用秒计时,用于浏览器来缓存预请求的结果。这个会被包含在预请求结果的Access-Control-Max-Age头中。一个复制会阻止缓存。

默认: 1800

cors.support.credentials

是否支持缓存用户凭据,他在 Access-Control-Allow-Credentials头中被暴露出来。它帮助浏览器确定是否可以使用凭据来进行实际请求

默认: true

cors.request.decorate

要控制是否应该向HttpServletRequest对象添加CORS特定属性的标志。
Defaults: true

下面是一个完整的例子。

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  <init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>*</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.methods</param-name>
    <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.headers</param-name>
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
  </init-param>
  <init-param>
    <param-name>cors.exposed.headers</param-name>
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
  </init-param>
  <init-param>
    <param-name>cors.support.credentials</param-name>
    <param-value>true</param-value>
  </init-param>
  <init-param>
    <param-name>cors.preflight.maxage</param-name>
    <param-value>10</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

总结

为geoserver配置跨域只要在他的app下面的web.xml里面修改web.xml即可注意一定要按照自己得容器规则修改。

猜你喜欢

转载自blog.csdn.net/yatsov/article/details/80167807
8.5