diff --git a/src/main/java/ch/psi/daq/queryrest/config/QueryRestConfig.java b/src/main/java/ch/psi/daq/queryrest/config/QueryRestConfig.java index eebc710..523df3c 100644 --- a/src/main/java/ch/psi/daq/queryrest/config/QueryRestConfig.java +++ b/src/main/java/ch/psi/daq/queryrest/config/QueryRestConfig.java @@ -9,6 +9,7 @@ import java.util.function.Function; import javax.annotation.PostConstruct; import javax.annotation.Resource; +import javax.servlet.Filter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,6 +42,7 @@ import ch.psi.daq.query.model.Query; import ch.psi.daq.query.model.QueryField; import ch.psi.daq.query.model.impl.AbstractQuery; import ch.psi.daq.queryrest.controller.validator.QueryValidator; +import ch.psi.daq.queryrest.filter.SimpleCORSFilter; import ch.psi.daq.queryrest.model.PropertyFilterMixin; import ch.psi.daq.queryrest.response.JsonByteArraySerializer; import ch.psi.daq.queryrest.response.JsonStreamSerializer; @@ -178,6 +180,11 @@ public class QueryRestConfig extends WebMvcConfigurerAdapter { public Validator queryValidator() { return new QueryValidator(); } + + @Bean + public Filter simpleCORSFilter() { + return new SimpleCORSFilter(); + } // ========================================================================================== // TODO: This is simply for initial / rudimentary testing - remove once further evolved diff --git a/src/main/java/ch/psi/daq/queryrest/filter/SimpleCORSFilter.java b/src/main/java/ch/psi/daq/queryrest/filter/SimpleCORSFilter.java new file mode 100644 index 0000000..fae4adb --- /dev/null +++ b/src/main/java/ch/psi/daq/queryrest/filter/SimpleCORSFilter.java @@ -0,0 +1,41 @@ +package ch.psi.daq.queryrest.filter; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class SimpleCORSFilter implements Filter { + + @Value("${queryrest.enableCORS}") + private boolean enableCORS; + + public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, + ServletException { + + if (enableCORS) { + HttpServletResponse response = (HttpServletResponse) res; + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Headers", + "Content-Type, Cache-Control, Accept, Authorization, X-Requested-With"); + } + chain.doFilter(req, res); + } + + public void init(FilterConfig filterConfig) { + } + + public void destroy() { + } +} diff --git a/src/main/resources/queryrest.properties b/src/main/resources/queryrest.properties index 55b2cd3..0915ca8 100644 --- a/src/main/resources/queryrest.properties +++ b/src/main/resources/queryrest.properties @@ -1,4 +1,9 @@ # defines the fields that are included in the response # if no fields have been specified by the user queryrest.default.response.fields=channel,pulseId,globalMillis,globalNanos,iocMillis,iocNanos,shape,value -queryrest.default.response.aggregations=min,max,sum \ No newline at end of file + +# aggregation which are included in the response by default if aggregation is enabled for a given query +queryrest.default.response.aggregations=min,max,sum + +# enables / disables the CORS servlet filter. Adds multiple CORS headers to the response +queryrest.enableCORS=true \ No newline at end of file