From 1ef045f26a8e0e4bce66a5655d859fa01291568e Mon Sep 17 00:00:00 2001 From: Pierre-Gilles Levallois <pierregilles.levallois@gmail.com> Date: Thu, 28 Sep 2023 11:19:33 +0200 Subject: [PATCH] dealing with CORS header in Tiles server conf --- geoserver/Dockerfile | 6 +- geoserver/conf/web.xml | 291 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 293 insertions(+), 4 deletions(-) create mode 100644 geoserver/conf/web.xml diff --git a/geoserver/Dockerfile b/geoserver/Dockerfile index 5da5d3b..102186a 100644 --- a/geoserver/Dockerfile +++ b/geoserver/Dockerfile @@ -5,11 +5,9 @@ ARG GEOSERVER_PORT=8080 ENV GEOSERVER_DATA_DIR="/opt/geoserver_data" COPY ./geoserver_data $GEOSERVER_DATA_DIR +# Add conf for geoserver (CORS Header allowing) +COPY ./conf/web.xml $CATALINA_HOME/webapp/geoserver/WEB-INF/web.xml -# RUN groupadd geoserver && \ -# useradd geoserver -g geoserver && \ -# chown -R geoserver:geoserver $GEOSERVER_DATA_DIR && \ -# chown -R geoserver:geoserver /opt/apache-tomcat* RUN \ chgrp -R 0 /opt && \ chmod -R g+rwx /opt diff --git a/geoserver/conf/web.xml b/geoserver/conf/web.xml new file mode 100644 index 0000000..2f1cd06 --- /dev/null +++ b/geoserver/conf/web.xml @@ -0,0 +1,291 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> +<web-app> + <display-name>GeoServer</display-name> + + <context-param> + <param-name>serviceStrategy</param-name> + <!-- Meaning of the different values : + + PARTIAL-BUFFER2 + - Partially buffers the first xKb to disk. Once that has buffered, the the + result is streamed to the user. This will allow for most errors to be caught + early. + + BUFFER + - stores the entire response in memory first, before sending it off to + the user (may run out of memory) + + SPEED + - outputs directly to the response (and cannot recover in the case of an + error) + + FILE + - outputs to the local filesystem first, before sending it off to the user + --> + <param-value>PARTIAL-BUFFER2</param-value> + </context-param> + + <context-param> + <!-- see comments on the PARTIAL-BUFFER strategy --> + <!-- this sets the size of the buffer. default is "50" = 50kb --> + + <param-name>PARTIAL_BUFFER_STRATEGY_SIZE</param-name> + <param-value>50</param-value> + </context-param> + + <!--Can be true or false (defaults to: false). --> + <!--When true the JSONP (text/javascript) output format is enabled --> + <!-- + <context-param> + <param-name>ENABLE_JSONP</param-name> + <param-value>true</param-value> + </context-param> + --> + <!-- + <context-param> + <param-name>PROXY_BASE_URL</param-name> + <param-value>http://82.58.146.45/geoserver</param-value> + </context-param> + --> + + <!-- + <context-param> + <param-name>GEOSERVER_DATA_DIR</param-name> + <param-value>C:\eclipse\workspace\geoserver_trunk\cite\confCiteWFSPostGIS</param-value> + </context-param> + --> + + <!-- pick up all spring application contexts --> + <context-param> + <param-name>contextConfigLocation</param-name> + <param-value>classpath*:/applicationContext.xml classpath*:/applicationSecurityContext.xml</param-value> + </context-param> + + <filter> + <filter-name>FlushSafeFilter</filter-name> + <filter-class>org.geoserver.filters.FlushSafeFilter</filter-class> + </filter> + + <filter> + <filter-name>Set Character Encoding</filter-name> + <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> + <init-param> + <param-name>encoding</param-name> + <param-value>UTF-8</param-value> + </init-param> + </filter> + + <filter> + <filter-name>SessionDebugger</filter-name> + <filter-class>org.geoserver.filters.SessionDebugFilter</filter-class> + </filter> + + <filter> + <filter-name>filterChainProxy</filter-name> + <filter-class> org.springframework.web.filter.DelegatingFilterProxy</filter-class> + </filter> + + <filter> + <filter-name>xFrameOptionsFilter</filter-name> + <filter-class>org.geoserver.filters.XFrameOptionsFilter</filter-class> + </filter> + + <filter> + <filter-name>GZIP Compression Filter</filter-name> + <filter-class>org.geoserver.filters.GZIPFilter</filter-class> + <init-param> + <!-- The compressed-types parameter is a comma-separated list of regular expressions. + If a mime type matches any of the regular expressions then it will be compressed. + --> + <param-name>compressed-types</param-name> + <param-value>text/.*,.*xml.*,application/json,application/x-javascript</param-value> + </init-param> + </filter> + + <filter> + <filter-name>Advanced Dispatch Filter</filter-name> + <filter-class>org.geoserver.platform.AdvancedDispatchFilter</filter-class> + <!-- + This filter allows for a single mapping to the spring dispatcher. However using /* as a mapping + in a servlet mapping causes the servlet path to be "/" of the request. This causes problems with + library like wicket and restlet. So this filter fakes the servlet path by assuming the first + component of the path is the mapped path. + --> + </filter> + + <filter> + <filter-name>Spring Delegating Filter</filter-name> + <filter-class>org.geoserver.filters.SpringDelegatingFilter</filter-class> + <!-- + This filter allows for filters to be loaded via spring rather than + registered here in web.xml. One thing to note is that for such filters + init() is not called. INstead any initialization is performed via spring + ioc. + --> + </filter> + + <filter> + <filter-name>Thread locals cleanup filter</filter-name> + <filter-class>org.geoserver.filters.ThreadLocalsCleanupFilter</filter-class> + <!-- + This filter cleans up thread locals Geotools is setting up for concurrency and performance + reasons + --> + </filter> + + <!-- Uncomment following filter to enable CORS in Jetty. Do not forget the second config block further down. --> + <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 in Tomcat. Do not forget the second config block further down. --> + <filter> + <filter-name>cross-origin</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,PUT,DELETE,HEAD,OPTIONS</param-value> + </init-param> + <init-param> + <param-name>cors.allowed.headers</param-name> + <param-value>*</param-value> + </init-param> + </filter> + + <!-- + THIS FILTER MAPPING MUST BE THE FIRST ONE, otherwise we end up with ruined chars in the input from the GUI + See the "Note" in the Tomcat character encoding guide: + http://wiki.apache.org/tomcat/FAQ/CharacterEncoding + --> + <filter-mapping> + <filter-name>Set Character Encoding</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + + <!-- Uncomment following filter to enable CORS --> + <filter-mapping> + <filter-name>cross-origin</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + + <filter-mapping> + <filter-name>FlushSafeFilter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + + <filter-mapping> + <filter-name>SessionDebugger</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + + <filter-mapping> + <filter-name>GZIP Compression Filter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + + <filter-mapping> + <filter-name>xFrameOptionsFilter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + + <!-- + If you want to use your security system comment out this one too + --> + <filter-mapping> + <filter-name>filterChainProxy</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + + <filter-mapping> + <filter-name>Advanced Dispatch Filter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + + <filter-mapping> + <filter-name>Spring Delegating Filter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + + <filter-mapping> + <filter-name>Thread locals cleanup filter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + + <!-- general initializer, should be first thing to execute --> + <listener> + <listener-class>org.geoserver.GeoserverInitStartupListener</listener-class> + </listener> + + <!-- logging initializer, should execute before spring context startup --> + <listener> + <listener-class>org.geoserver.logging.LoggingStartupContextListener</listener-class> + </listener> + + <!-- spring context loader --> + <listener> + <listener-class>org.geoserver.platform.GeoServerContextLoaderListener</listener-class> + </listener> + + <!-- http session listener proxy --> + <listener> + <listener-class>org.geoserver.platform.GeoServerHttpSessionListenerProxy</listener-class> + </listener> + + <!-- request context listener for session-scoped beans --> + <listener> + <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> + </listener> + + <!-- spring dispatcher servlet, dispatches all incoming requests --> + <servlet> + <servlet-name>dispatcher</servlet-name> + <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> + </servlet> + + <!-- single mapping to spring, this only works properly if the advanced dispatch filter is + active --> + <servlet-mapping> + <servlet-name>dispatcher</servlet-name> + <url-pattern>/*</url-pattern> + </servlet-mapping> + + <mime-mapping> + <extension>xsl</extension> + <mime-type>text/xml</mime-type> + </mime-mapping> + <mime-mapping> + <extension>sld</extension> + <mime-type>text/xml</mime-type> + </mime-mapping> + <mime-mapping> + <extension>json</extension> + <mime-type>application/json</mime-type> + </mime-mapping> + + <welcome-file-list> + <welcome-file>index.html</welcome-file> + </welcome-file-list> + +</web-app> \ No newline at end of file -- GitLab