fix: 优化SimpleUserTransmit,数据编码改为base64
author刘洪青 <hongqing.liu@supwisdom.com>
Thu, 19 Sep 2019 10:06:26 +0000 (18:06 +0800)
committer刘洪青 <hongqing.liu@supwisdom.com>
Thu, 19 Sep 2019 10:06:26 +0000 (18:06 +0800)
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AuthnAccountRemoteFallbackFactory.java [moved from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AdminAccountRemoteFallbackFactory.java with 100% similarity]
bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AuthnAccountRemoteFeignClient.java [moved from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AdminAccountRemoteFeignClient.java with 100% similarity]
common/core/pom.xml
common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/feign/SimpleUserTransmitRequestInterceptor.java
common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/filter/SimpleUserTransmitFilter.java
gateway/pom.xml
gateway/src/main/java/com/supwisdom/institute/backend/gateway/filter/SimpleUserTransmitGlobalFilter.java

index dcfe763..ad793bd 100644 (file)
       <optional>true</optional>
     </dependency>
     
+    <dependency>
+      <groupId>commons-codec</groupId>
+      <artifactId>commons-codec</artifactId>
+    </dependency>
+    
     <dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>fastjson</artifactId>
index be002db..903219f 100644 (file)
@@ -1,9 +1,9 @@
 package com.supwisdom.institute.backend.common.core.transmit.feign;
 
-import java.net.URLDecoder;
-
 import lombok.extern.slf4j.Slf4j;
 
+import org.apache.commons.codec.binary.Base64;
+
 import com.alibaba.fastjson.JSONObject;
 import com.supwisdom.institute.backend.common.core.transmit.user.User;
 import com.supwisdom.institute.backend.common.core.transmit.user.UserContext;
@@ -20,10 +20,14 @@ public class SimpleUserTransmitRequestInterceptor implements RequestInterceptor
     if (user != null) {
       try {
         String jsonUser = JSONObject.toJSONString(user);
-        String headerValue = new String(URLDecoder.decode(jsonUser,"UTF-8"));
+        
+        //String headerValue = new String(URLDecoder.decode(jsonUser,"UTF-8"));
+        String headerValue = Base64.encodeBase64String(jsonUser.getBytes("UTF-8"));
+        
         template.header(UserContext.KEY_USER_IN_HTTP_HEADER, headerValue);
+        log.debug("User set to feign header: ok");
       } catch (Exception e) {
-        log.warn("User set error", e);
+        log.warn("User set to feign header: error", e);
       }
     }
   }
index 7d99859..644e4f6 100644 (file)
@@ -1,7 +1,6 @@
 package com.supwisdom.institute.backend.common.core.transmit.filter;
 
 import java.io.IOException;
-import java.net.URLDecoder;
 
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
@@ -11,6 +10,7 @@ import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.StringUtils;
 
 import com.alibaba.fastjson.JSON;
@@ -35,15 +35,17 @@ public class SimpleUserTransmitFilter implements Filter {
     log.debug("Header {} is: {}", UserContext.KEY_USER_IN_HTTP_HEADER, headerValue);
     if (StringUtils.isNotBlank(headerValue)) {
       try {
-        String jsonUser = URLDecoder.decode(headerValue,"UTF-8");
+        //String jsonUser = URLDecoder.decode(headerValue,"UTF-8");
+        String jsonUser = new String(Base64.decodeBase64(headerValue), "UTF-8");
         log.debug("jsonUser is: {}", jsonUser);
         
         User user = JSON.parseObject(jsonUser, User.class);
         log.debug("User is: {}", user);
         
         UserContext.setUser(user);
+        log.debug("User get from header: ok");
       } catch (Exception e) {
-        log.warn("User get error", e);
+        log.warn("User get from header: error", e);
       }
     }
     
index 7f39a11..86dfd32 100644 (file)
       <artifactId>sw-backend-common-framework</artifactId>
     </dependency>
 
-
+    <dependency>
+      <groupId>commons-codec</groupId>
+      <artifactId>commons-codec</artifactId>
+    </dependency>
+    
     <dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>fastjson</artifactId>
index 9b64970..c0e4910 100644 (file)
@@ -1,9 +1,8 @@
 package com.supwisdom.institute.backend.gateway.filter;
 
-import java.net.URLDecoder;
-
 import lombok.extern.slf4j.Slf4j;
 
+import org.apache.commons.codec.binary.Base64;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
 import org.springframework.core.Ordered;
@@ -38,20 +37,24 @@ public class SimpleUserTransmitGlobalFilter implements GlobalFilter, Ordered {
       .map(SecurityContext::getAuthentication)
       .map(Authentication::getPrincipal)
       .cast(InfrasUser.class)
-      .map(myUser -> {
+      .map(infrasUser -> {
         try {
-          User user = new User(myUser.getUsername(), myUser.getRoles(), myUser.getAttributes());
+          User user = new User(infrasUser.getUsername(), infrasUser.getRoles(), infrasUser.getAttributes());
           
           String jsonUser = JSONObject.toJSONString(user);
-          log.info(jsonUser);
-          String headerValue = new String(URLDecoder.decode(jsonUser,"UTF-8"));
+          log.debug(jsonUser);
+          
+          //String headerValue = new String(URLDecoder.decode(jsonUser,"UTF-8"));
+          String headerValue = Base64.encodeBase64String(jsonUser.getBytes("UTF-8"));
+          log.debug(jsonUser);
+          
           ServerHttpRequest request = exchange.getRequest().mutate()
               .header(UserContext.KEY_USER_IN_HTTP_HEADER, headerValue)
               .build();
-          log.debug("User set ok");
+          log.debug("User set to gateway header: ok");
           return exchange.mutate().request(request).build();
         } catch (Exception e) {
-          log.warn("User set error", e);
+          log.warn("User set to gateway header: error", e);
         }
         return exchange;
       })