package com.revolsys.ui.web.filter; import java.io.IOException; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Set; import java.util.TreeSet; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.filter.OncePerRequestFilter; import com.revolsys.util.Property; import com.revolsys.util.Strings; public class BasicCorsFilter extends OncePerRequestFilter { private Set<String> allowedHeaders; private String allowedHeadersString; private Set<String> allowedMethods; private String allowedMethodsString; private int maxAge; private String maxAgeString; public BasicCorsFilter() { setAllowedMethods(Arrays.asList("DELETE", "GET", "POST", "PUT")); setAllowedHeaders(Arrays.asList("Accept-Encoding", "Accept", "Accept-Language")); setMaxAge(3600); } @Override protected void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response, final FilterChain filterChain) throws ServletException, IOException { final String method = request.getMethod(); final String origin = request.getHeader("Origin"); final String requestMethod = request.getHeader("Access-Control-Request-Method"); response.addHeader("Access-Control-Allow-Origin", "*"); if ("OPTIONS".equals(method) && Property.hasValue(origin) && Property.hasValue(requestMethod)) { response.addHeader("Access-Control-Allow-Methods", this.allowedMethodsString); final String requestHeaders = request.getHeader("Access-Control-Request-Headers"); if (Property.hasValue(requestHeaders)) { response.addHeader("Access-Control-Allow-Headers", this.allowedHeadersString); } response.addHeader("Access-Control-Max-Age", this.maxAgeString); } filterChain.doFilter(request, response); } public Collection<String> getAllowedHeaders() { return this.allowedHeaders; } public Set<String> getAllowedMethods() { return this.allowedMethods; } public int getMaxAge() { return this.maxAge; } public void setAllowedHeaders(final Collection<String> allowedHeaders) { if (allowedHeaders == null) { this.allowedHeaders = Collections.emptySet(); } else { this.allowedHeaders = new TreeSet<>(allowedHeaders); } this.allowedHeadersString = Strings.toString(" ,", allowedHeaders); } public void setAllowedMethods(final Collection<String> allowedMethods) { if (allowedMethods == null) { this.allowedMethods = Collections.emptySet(); } else { this.allowedMethods = new TreeSet<>(allowedMethods); } this.allowedMethodsString = Strings.toString(" ,", allowedMethods); } public void setMaxAge(final int maxAge) { this.maxAge = maxAge; this.maxAgeString = String.valueOf(maxAge); } }