diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AdminAccountRemoteFallbackFactory.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AuthnAccountRemoteFallbackFactory.java
similarity index 100%
rename from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AdminAccountRemoteFallbackFactory.java
rename to bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AuthnAccountRemoteFallbackFactory.java
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AdminAccountRemoteFeignClient.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AuthnAccountRemoteFeignClient.java
similarity index 100%
rename from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AdminAccountRemoteFeignClient.java
rename to bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AuthnAccountRemoteFeignClient.java
diff --git a/common/core/pom.xml b/common/core/pom.xml
index dcfe763..ad793bd 100644
--- a/common/core/pom.xml
+++ b/common/core/pom.xml
@@ -55,6 +55,11 @@
     </dependency>
     
     <dependency>
+      <groupId>commons-codec</groupId>
+      <artifactId>commons-codec</artifactId>
+    </dependency>
+    
+    <dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>fastjson</artifactId>
     </dependency>
diff --git a/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/feign/SimpleUserTransmitRequestInterceptor.java b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/feign/SimpleUserTransmitRequestInterceptor.java
index be002db..903219f 100644
--- a/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/feign/SimpleUserTransmitRequestInterceptor.java
+++ b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/feign/SimpleUserTransmitRequestInterceptor.java
@@ -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 @@
     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);
       }
     }
   }
diff --git a/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/filter/SimpleUserTransmitFilter.java b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/filter/SimpleUserTransmitFilter.java
index 7d99859..644e4f6 100644
--- a/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/filter/SimpleUserTransmitFilter.java
+++ b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/transmit/filter/SimpleUserTransmitFilter.java
@@ -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.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 @@
     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);
       }
     }
     
diff --git a/gateway/pom.xml b/gateway/pom.xml
index 7f39a11..86dfd32 100644
--- a/gateway/pom.xml
+++ b/gateway/pom.xml
@@ -112,7 +112,11 @@
       <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>
diff --git a/gateway/src/main/java/com/supwisdom/institute/backend/gateway/filter/SimpleUserTransmitGlobalFilter.java b/gateway/src/main/java/com/supwisdom/institute/backend/gateway/filter/SimpleUserTransmitGlobalFilter.java
index 9b64970..c0e4910 100644
--- a/gateway/src/main/java/com/supwisdom/institute/backend/gateway/filter/SimpleUserTransmitGlobalFilter.java
+++ b/gateway/src/main/java/com/supwisdom/institute/backend/gateway/filter/SimpleUserTransmitGlobalFilter.java
@@ -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 @@
       .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;
       })
