Bläddra i källkod

feat: 配置跨域

DingXiaoYu 2 år sedan
förälder
incheckning
b4c6e00e73

+ 48 - 0
src/main/java/com/seecoder/BlueWhale/Configure/CorsFilter.java

@@ -0,0 +1,48 @@
+package com.seecoder.BlueWhale.Configure;
+
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+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.annotation.WebFilter;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @Author: DingXiaoyu
+ * @Date: 19:17 2023/12/5
+ * 在SpringBoot过滤器中配置跨域,
+ * 跨域配置不能和拦截器写一起,
+ * 会造成冲突。
+*/
+@Component
+@Order(Ordered.HIGHEST_PRECEDENCE)
+@WebFilter("/*")
+public class CorsFilter implements Filter {
+
+    @Override
+    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
+            throws IOException, ServletException {
+        HttpServletResponse response = (HttpServletResponse) res;
+        response.setHeader("Access-Control-Allow-Origin", "*");
+        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE");
+        response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
+        response.setHeader("Access-Control-Max-Age", "3600");
+
+        chain.doFilter(req, res);
+    }
+
+    @Override
+    public void init(FilterConfig filterConfig) {
+    }
+
+    @Override
+    public void destroy() {
+    }
+}

+ 1 - 13
src/main/java/com/seecoder/BlueWhale/Configure/MyWebMvcConfig.java

@@ -2,7 +2,6 @@ package com.seecoder.BlueWhale.Configure;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
@@ -12,13 +11,10 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  *
  * 这个类实现了WebMvcConfigurer接口,
  * 表示会被SpringBoot接受,
- * 这个类有两个作用:配置拦截器和跨域。
+ * 这个类的作用是配置拦截器。
  * addInterceptors方法配置了拦截器,
  * 添加了loginInterceptor作为拦截器,
  * 并且设置除了register和login的所有接口都需要通过该拦截器。
- * addCorsMappings方法配置了跨域,
- * 表示任何格式的请求都能通过,
- * 包括了请求地址、请求端域名、请求方法(GET、POST等)、请求头。
 */
 @Configuration
 public class MyWebMvcConfig implements WebMvcConfigurer {
@@ -34,12 +30,4 @@ public class MyWebMvcConfig implements WebMvcConfigurer {
                 .order(1);
     }
 
-    @Override
-    public void addCorsMappings(CorsRegistry registry) {
-        registry.addMapping("/**")
-                .allowedOrigins("*")
-                .allowedMethods("*")
-                .allowedHeaders("*");
-    }
-
 }

+ 2 - 9
src/main/java/com/seecoder/BlueWhale/Controller/ProductController.java

@@ -3,18 +3,11 @@ package com.seecoder.BlueWhale.Controller;
 import com.seecoder.BlueWhale.Service.ProductService;
 import com.seecoder.BlueWhale.VO.ProductVO;
 import com.seecoder.BlueWhale.VO.ResultVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
 @RestController
 @RequestMapping("/api/product")
 public class ProductController {