Browse Source

网关新增后置接口操作,并过滤指定接口通知给老系统

mac 2 years ago
parent
commit
151d9e070e

+ 22 - 0
kxs-common/kxs-common-security/src/main/java/com/kxs/common/security/service/KxsRedisOAuth2AuthorizationService.java

@@ -1,9 +1,16 @@
 package com.kxs.common.security.service;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.kxs.common.security.model.KxsSecurityUser;
 import lombok.RequiredArgsConstructor;
+import org.springframework.asm.Attribute;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.serializer.RedisSerializer;
 import org.springframework.lang.Nullable;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.oauth2.core.OAuth2AccessToken;
 import org.springframework.security.oauth2.core.OAuth2RefreshToken;
 import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
@@ -13,9 +20,13 @@ import org.springframework.security.oauth2.server.authorization.OAuth2Authorizat
 import org.springframework.security.oauth2.server.authorization.OAuth2TokenType;
 import org.springframework.util.Assert;
 
+import java.nio.file.attribute.UserPrincipal;
+import java.security.KeyStore;
+import java.security.Principal;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 
@@ -73,6 +84,17 @@ public class KxsRedisOAuth2AuthorizationService implements OAuth2AuthorizationSe
 			redisTemplate.opsForValue()
 				.set(buildKey(OAuth2ParameterNames.ACCESS_TOKEN, accessToken.getTokenValue()), authorization, between,
 						TimeUnit.SECONDS);
+			//TODO 登陆后根据token保存用户ID,仅限同步数据时使用,后续会删除
+			Object attribute = authorization.getAttribute("java.security.Principal");
+			if(attribute instanceof UsernamePasswordAuthenticationToken authenticationToken){
+				Object principal = authenticationToken.getPrincipal();
+				if (principal instanceof KxsSecurityUser userDetails) {
+					redisTemplate.opsForValue()
+							.set(accessToken.getTokenValue(), userDetails.getId(), between,
+									TimeUnit.SECONDS);
+				}
+			}
+
 		}
 	}
 

+ 9 - 2
kxs-gateway/src/main/java/com/kxs/gateway/api/filter/ResponseFilter.java

@@ -18,6 +18,7 @@ import org.springframework.core.Ordered;
 import org.springframework.core.io.buffer.DataBuffer;
 import org.springframework.core.io.buffer.DataBufferFactory;
 import org.springframework.core.io.buffer.DataBufferUtils;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.server.reactive.ServerHttpRequest;
@@ -51,6 +52,7 @@ public class ResponseFilter implements GlobalFilter, Ordered {
 
     private final IMQSender imqSender;
 
+    private final RedisTemplate<String, Object> redisTemplate;
 
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
@@ -137,18 +139,23 @@ public class ResponseFilter implements GlobalFilter, Ordered {
 
     @Override
     public int getOrder() {
-        return -1;
+        return Integer.MIN_VALUE;
     }
 
     private void sendMsg(String url, String param, String token) {
+        if (token.startsWith("Bearer ")) {
+            token = token.substring(7);
+        }
+        Object userId = redisTemplate.opsForValue().get(token);
 
         //发送消息
         RabbitDtsMethodQueueMQ msg = RabbitDtsMethodQueueMQ.build(RabbitDtsMethodQueueMQ.MsgEntity.builder()
                 .url(url)
+                .userId(userId)
                 .param(param)
                 .build());
 //        imqSender.send(msg);
-        log.info("send msg success, msg={}", param);
+        log.info("send msg success, msg={}", JSON.toJSONString(msg));
     }
 
 

+ 5 - 0
kxs-gateway/src/main/java/com/kxs/gateway/api/rabbit/RabbitDtsMethodQueueMQ.java

@@ -52,6 +52,11 @@ public class RabbitDtsMethodQueueMQ extends AbstractMQ {
          */
         private String url;
 
+        /**
+         * 用户ID
+         */
+        private Object userId;
+
         /**
          * 请求参数
          */

+ 0 - 2
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/util/GdRsaUtils.java

@@ -33,9 +33,7 @@ public class GdRsaUtils {
 
     public static final String KEY_ALGORITHM = "RSA";
     public static final String DEFAULT_CHARSET = "UTF-8";
-    // TODO: 配置私钥 (用于加密)
     public static final String DEFAULT_PRIVATE_KEY = "";
-    // TODO: 配置公钥 (用于解密)
     public static final String DEFAULT_PUBLIC_KEY = "";
 
     /**

+ 5 - 1
kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/impl/KxsUserServiceImpl.java

@@ -66,7 +66,11 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
         KxsUserBank userBank = new KxsUserBank();
         //操作类型
         OperationType operation = dmlData.getOperation();
-
+        if (operation.equals(OperationType.DELETE)) {
+            // 更新数据
+            baseMapper.deleteById(userId);
+            return;
+        }
         for (String field : changeFieldList) {
 
             switch (field) {