GeoServer 的跨域
GeoServer是一款Java系的地理信息服务器,功能强大,但是默认是war包安装的时候没有设置跨域有时候ajax是无法请求道图层数据的所以这里要进行跨域的设置。
这里一定要注意一点!!!!!Tomcat的跨域设置和Jetty的跨域设置时不同的,类名不同的。而Geoserver的文档里写的容器默认是jetty,所以如果里面需要什么关于java容器的设置请自己再查一下对应的自己的容器是咋回事!!!切记。
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即可注意一定要按照自己得容器规则修改。