问题描述:通过js访问geoserver提供的rest接口,返回403
解决方法:(1)geoserver/WEB-INF/web.xml下加如下配置:
<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,Authorization</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>
cors.allowed.origins:允许访问资源的起源列表。可以指定一个*以允许从任何来源访问资源。否则,可以提供逗号分隔的白名单。
cors.allowed.headers:这个用于控制请求头中所带的项,这个也会在预请求中作为Access-Control-Allow-Headers头的内容。
cors.exposed.headers:这里面存着允许被暴露来的HTTP请求头,在Access-Control-Expose-Headers头中会显示。
cors.preflight.maxage:这个用秒计时,用于浏览器来缓存预请求的结果。这个会被包含在预请求结果的Access-Control-Max-Age头中。一个复制会阻止缓存。
cors.support.credentials:是否支持缓存用户凭据,他在 Access-Control-Allow-Credentials头中被暴露出来。它帮助浏览器确定是否可以使用凭据来进行实际请求
cors.request.decorate:要控制是否应该向HttpServletRequest对象添加CORS特定属性的标志。
(2)js中调用rest时,headers添加'Authorization'
网友评论