Ver código fonte

message-service 添加 TokenFilter

reghao 3 meses atrás
pai
commit
684e8218b4

+ 61 - 0
message/message-service/src/main/java/cn/reghao/tnb/message/app/config/TokenFilter.java

@@ -0,0 +1,61 @@
+package cn.reghao.tnb.message.app.config;
+
+import cn.reghao.tnb.common.auth.LoginUser;
+import cn.reghao.tnb.common.auth.UserContext;
+import cn.reghao.tnb.common.util.ConstantId;
+import cn.reghao.tnb.common.web.ServletUtil;
+import jakarta.servlet.*;
+import org.slf4j.MDC;
+import org.springframework.stereotype.Component;
+
+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 implements Filter {
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+            throws IOException, ServletException {
+        String requestId = ServletUtil.getHeader("x-request-id");
+        MDC.put("request_id", requestId);
+
+        long userId = ConstantId.ANONYMOUS_USER_ID;
+        String userIdStr = ServletUtil.getHeader("x-user-id");
+        if (userIdStr != null) {
+            userId = Long.parseLong(userIdStr);
+        }
+
+        String loginId = ConstantId.ANONYMOUS_USER_ID + "";
+        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(",")));
+        }
+
+        LoginUser loginUser = new LoginUser(userId, loginId, roles);
+        try (UserContext context = new UserContext(loginUser)) {
+            chain.doFilter(request, response);
+        } finally {
+            MDC.clear();
+        }
+    }
+
+    @Override
+    public void destroy() {
+    }
+}