|
|
@@ -0,0 +1,57 @@
|
|
|
+package com.kxs.system.biz.filter;
|
|
|
+
|
|
|
+import com.kxs.system.biz.config.GatewayConfigProperties;
|
|
|
+import jakarta.servlet.*;
|
|
|
+import jakarta.servlet.http.HttpServletRequest;
|
|
|
+import jakarta.servlet.http.HttpServletResponse;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author Apple
|
|
|
+ */
|
|
|
+@RequiredArgsConstructor
|
|
|
+public class GlobalCorsFilter implements Filter {
|
|
|
+
|
|
|
+
|
|
|
+ private final GatewayConfigProperties configProperties;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
|
|
|
+ throws IOException, ServletException {
|
|
|
+ HttpServletRequest request = (HttpServletRequest)servletRequest;
|
|
|
+ HttpServletResponse response = (HttpServletResponse)servletResponse;
|
|
|
+
|
|
|
+
|
|
|
+ // 获取客户端原始请求域
|
|
|
+ String origin = request.getHeader("Origin");
|
|
|
+ String originDomain = removeHttp(origin);
|
|
|
+ if(configProperties.getAllowDomains().isEmpty() || configProperties.getAllowDomains().contains(originDomain)){
|
|
|
+ // 在响应对象中,添加CROS协议相关的header属性
|
|
|
+ response.setHeader("Access-Control-Allow-Origin", origin);
|
|
|
+ response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,HEAD,PUT,PATCH");
|
|
|
+ response.setHeader("Access-Control-Max-Age", "3600");
|
|
|
+ response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Authorization,authorization");
|
|
|
+ response.setHeader("Access-Control-Allow-Credentials","true");
|
|
|
+ }
|
|
|
+ if ("OPTIONS".equalsIgnoreCase((request).getMethod())) {
|
|
|
+ response.setStatus(HttpServletResponse.SC_OK);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //继续往下传递
|
|
|
+ filterChain.doFilter(servletRequest, servletResponse);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 移除http协议头部
|
|
|
+ */
|
|
|
+ public static String removeHttp(String url){
|
|
|
+ return url.replace("http://", "").replace("https://", "");
|
|
|
+ }
|
|
|
+
|
|
|
+}
|