Browse Source

oss-mgr 中添加一个 TokenFilter 处理来自 tnb gateway 转发的请求

reghao 1 tháng trước cách đây
mục cha
commit
3dc8629174

+ 15 - 1
oss-mgr/src/main/java/cn/reghao/oss/mgr/config/FilterConfig.java

@@ -19,8 +19,22 @@ public class FilterConfig {
         registration.addUrlPatterns("/api/oss/sdk/*", "/api/oss/mgr/*");
 
         // 设置执行顺序,数越小越靠前
-        registration.setOrder(1);
+        registration.setOrder(2);
         registration.setName("ossAuthFilter");
         return registration;
     }
+
+    @Bean
+    public FilterRegistrationBean<TokenFilter> tokenFilterRegistration(TokenFilter tokenFilter) {
+        FilterRegistrationBean<TokenFilter> registration = new FilterRegistrationBean<>();
+        registration.setFilter(tokenFilter);
+
+        // 只拦截对象操作相关的路径
+        registration.addUrlPatterns("/api/oss/*");
+
+        // 设置执行顺序,数越小越靠前
+        registration.setOrder(1);
+        registration.setName("tokenFilter");
+        return registration;
+    }
 }

+ 56 - 0
oss-mgr/src/main/java/cn/reghao/oss/mgr/config/TokenFilter.java

@@ -0,0 +1,56 @@
+package cn.reghao.oss.mgr.config;
+
+import cn.reghao.oss.mgr.util.ServletUtil;
+import jakarta.servlet.*;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.slf4j.MDC;
+import org.springframework.stereotype.Component;
+import org.springframework.web.filter.OncePerRequestFilter;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author reghao
+ * @date 2023-08-25 21:14:23
+ */
+@Component
+public class TokenFilter extends OncePerRequestFilter {
+    @Override
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
+            throws IOException, ServletException {
+        String requestId = ServletUtil.getHeader("x-request-id");
+        MDC.put("request_id", requestId);
+
+        long userId = -1;
+        String userIdStr = ServletUtil.getHeader("x-user-id");
+        if (userIdStr != null) {
+            userId = Long.parseLong(userIdStr);
+        }
+
+        String loginId = userId + "";
+        String loginIdStr = ServletUtil.getHeader("x-login-id");
+        if (loginIdStr != null) {
+            loginId = loginIdStr;
+        }
+
+        Set<String> roles = new HashSet<>();
+        String rolesStr = ServletUtil.getHeader("x-user-roles");
+        if (rolesStr != null) {
+            roles.addAll(Arrays.asList(rolesStr.split(",")));
+        }
+
+        try (UserContext.UserResource ignored = UserContext.set(userId)) {
+            filterChain.doFilter(request, response);
+        } finally {
+            MDC.clear();
+        }
+    }
+
+    @Override
+    public void destroy() {
+    }
+}

+ 15 - 0
oss-mgr/src/main/java/cn/reghao/oss/mgr/controller/ObjectController.java

@@ -0,0 +1,15 @@
+package cn.reghao.oss.mgr.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * oss 对外提供的接口
+ *
+ * @author reghao
+ * @date 2026-05-06 14:41:22
+ */
+@RestController
+@RequestMapping("/api/oss/object")
+public class ObjectController {
+}