|
@@ -0,0 +1,46 @@
|
|
|
+package com.abi.qms.platform.infrastructure.interceptor;
|
|
|
+
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.core.Ordered;
|
|
|
+import org.springframework.core.annotation.Order;
|
|
|
+import org.springframework.http.HttpHeaders;
|
|
|
+import org.springframework.http.HttpMethod;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.web.filter.OncePerRequestFilter;
|
|
|
+
|
|
|
+import javax.servlet.FilterChain;
|
|
|
+import javax.servlet.ServletException;
|
|
|
+import javax.servlet.annotation.WebFilter;
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.io.IOException;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 跨域过滤器
|
|
|
+ * @author AndyTan
|
|
|
+ */
|
|
|
+@Component
|
|
|
+@Order(Ordered.HIGHEST_PRECEDENCE)
|
|
|
+@WebFilter(urlPatterns = "/**")
|
|
|
+public class CorsFilter extends OncePerRequestFilter {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
|
|
|
+ throws IOException, ServletException {
|
|
|
+ String origin = request.getHeader("Origin");
|
|
|
+ if (StringUtils.isNotEmpty(origin)) {
|
|
|
+ response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
|
|
|
+ response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origin);
|
|
|
+ response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "*");
|
|
|
+ response.setHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "*");
|
|
|
+ }
|
|
|
+ if (HttpMethod.OPTIONS.matches(request.getMethod())) {
|
|
|
+ response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "*");
|
|
|
+ response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "*");
|
|
|
+ response.setHeader(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "3600");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ filterChain.doFilter(request, response);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|