diff --git a/bff/admin/.gitignore b/bff/admin/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/bff/admin/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/bff/admin/Dockerfile b/bff/admin/Dockerfile
index 372661c..b91c9f4 100644
--- a/bff/admin/Dockerfile
+++ b/bff/admin/Dockerfile
@@ -1,4 +1,4 @@
-FROM harbor.supwisdom.com/institute/openjdk:8-jre
+FROM harbor.supwisdom.com/institute/openjdk:8-jre-alpine
 
 ENV ENABLE_JMX_SSL=false
 ENV JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=docker
diff --git a/bff/admin/pom.xml b/bff/admin/pom.xml
index 0f600d2..d141279 100644
--- a/bff/admin/pom.xml
+++ b/bff/admin/pom.xml
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
@@ -19,7 +19,7 @@
   <description>Supwisdom Backend Framework Admin Backend for Frontend project</description>
 
   <properties>
-    <start-class>com.supwisdom.institute.admin.bff.Application</start-class>
+    <start-class>com.supwisdom.institute.backend.admin.bff.Application</start-class>
   </properties>
 
   <dependencies>
@@ -31,13 +31,6 @@
     </dependency>
 
     <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <scope>provided</scope>
-    </dependency>
-
-
-    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter</artifactId>
     </dependency>
@@ -48,27 +41,28 @@
       <artifactId>spring-boot-starter-actuator</artifactId>
     </dependency>
 
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-webflux</artifactId>
-    </dependency>
-    
+
     <dependency>
       <groupId>org.springframework.cloud</groupId>
-      <artifactId>spring-cloud-starter-gateway</artifactId>
+      <artifactId>spring-cloud-starter-openfeign</artifactId>
     </dependency>
 
 
-    <!-- <dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-web</artifactId>
+    </dependency>
+
+    <dependency>
       <groupId>com.supwisdom.infras</groupId>
       <artifactId>infras-online-doc</artifactId>
-    </dependency> -->
+    </dependency>
 
 
     <!-- <dependency>
       <groupId>com.supwisdom.infras</groupId>
       <artifactId>infras-mvc</artifactId>
-    </dependency>
+    </dependency> -->
 
     <dependency>
       <groupId>com.supwisdom.infras</groupId>
@@ -83,34 +77,6 @@
     <dependency>
       <groupId>com.supwisdom.infras</groupId>
       <artifactId>infras-lang</artifactId>
-    </dependency> -->
-
-
-    <!-- <dependency>
-      <groupId>com.supwisdom.infras</groupId>
-      <artifactId>infras-security</artifactId>
-      <exclusions>
-        <exclusion>
-          <groupId>org.springframework.boot</groupId>
-          <artifactId>spring-boot-starter-web</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency> -->
-
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-security</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>io.jsonwebtoken</groupId>
-      <artifactId>jjwt</artifactId>
-      <version>0.9.1</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.springframework.security</groupId>
-      <artifactId>spring-security-cas</artifactId>
     </dependency>
 
 
@@ -118,13 +84,19 @@
       <groupId>com.supwisdom.institute</groupId>
       <artifactId>sw-backend-common-framework</artifactId>
     </dependency>
-
-
+    
+    
+    <!-- openfeign's dependency -->
     <dependency>
-      <groupId>com.alibaba</groupId>
-      <artifactId>fastjson</artifactId>
+      <groupId>com.netflix.feign</groupId>
+      <artifactId>feign-httpclient</artifactId>
     </dependency>
 
+    <!-- <dependency>
+      <groupId>org.apache.httpcomponents</groupId>
+      <artifactId>httpclient</artifactId>
+    </dependency> -->
+
 
     <dependency>
       <groupId>io.springfox</groupId>
@@ -136,6 +108,12 @@
     </dependency>
 
 
+    <dependency>
+      <groupId>mysql</groupId>
+      <artifactId>mysql-connector-java</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+
     <!-- 热部署，无需重启项目 -->
     <dependency>
       <groupId>org.springframework.boot</groupId>
@@ -143,6 +121,7 @@
       <scope>runtime</scope>
     </dependency>
 
+
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
@@ -180,6 +159,7 @@
       <!-- <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-resources-plugin</artifactId>
+        <version>2.4.3</version>
         <configuration>
           <encoding>${project.build.sourceEncoding}</encoding>
         </configuration>
@@ -196,24 +176,24 @@
               <overwrite>true</overwrite>
               <resources>
                 <resource>
-                  <directory>${basedir}/../../doc</directory>
+                  <directory>${basedir}/../doc</directory>
                 </resource>
               </resources>
             </configuration>
           </execution>
           <execution>
-            <id>copy-certs-jwt-resources</id>
+            <id>copy-api-docs-resources</id>
             <phase>package</phase>
             <goals>
               <goal>copy-resources</goal>
             </goals>
             <configuration>
               <encoding>utf-8</encoding>
-              <outputDirectory>${basedir}/target/certs/jwt</outputDirectory>
+              <outputDirectory>${basedir}/target/api-docs</outputDirectory>
               <overwrite>true</overwrite>
               <resources>
                 <resource>
-                  <directory>${basedir}/../../certs/jwt</directory>
+                  <directory>${basedir}/../api-docs</directory>
                 </resource>
               </resources>
             </configuration>
diff --git a/bff/admin/src/main/java/com/supwisdom/infras/security/reactive/basic/BasicWebFluxSecurityConfiguration.java b/bff/admin/src/main/java/com/supwisdom/infras/security/reactive/basic/BasicWebFluxSecurityConfiguration.java
deleted file mode 100644
index 6d71175..0000000
--- a/bff/admin/src/main/java/com/supwisdom/infras/security/reactive/basic/BasicWebFluxSecurityConfiguration.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.supwisdom.infras.security.reactive.basic;
-
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.http.HttpMethod;
-import org.springframework.security.config.web.server.ServerHttpSecurity;
-import org.springframework.security.web.server.SecurityWebFilterChain;
-
-@Configuration
-@ConditionalOnProperty(name="infras.security.basic.enabled", havingValue="true")
-public class BasicWebFluxSecurityConfiguration {
-  
-  @Bean
-  public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
-      http
-          .authorizeExchange()
-              .pathMatchers(HttpMethod.OPTIONS).permitAll()
-              .pathMatchers("/api/public/**", "/api/open/**").permitAll()
-              .pathMatchers("/api/v*/public/**", "/api/v*/open/**").permitAll()
-              .pathMatchers("/api/*/v*/public/**", "/api/*/v*/open/**").permitAll()
-              .pathMatchers("/api/**").authenticated()
-              .anyExchange().authenticated();
-      
-      http.httpBasic();
-      
-      http.csrf().disable();
-      
-      http.formLogin().disable();
-      
-      return http.build();
-  }
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/infras/security/reactive/basic/EnableInfrasBasicWebFluxApi.java b/bff/admin/src/main/java/com/supwisdom/infras/security/reactive/basic/EnableInfrasBasicWebFluxApi.java
deleted file mode 100644
index 9658d27..0000000
--- a/bff/admin/src/main/java/com/supwisdom/infras/security/reactive/basic/EnableInfrasBasicWebFluxApi.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.supwisdom.infras.security.reactive.basic;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import org.springframework.context.annotation.Import;
-
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@Import(BasicWebFluxSecurityConfiguration.class)
-public @interface EnableInfrasBasicWebFluxApi {
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java
index baaeade..a5098a6 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java
@@ -2,82 +2,41 @@
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.annotation.Bean;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.http.server.reactive.ServerHttpResponse;
-import org.springframework.web.cors.reactive.CorsUtils;
-import org.springframework.web.server.ServerWebExchange;
-import org.springframework.web.server.WebFilter;
-import org.springframework.web.server.WebFilterChain;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
 
-import reactor.core.publisher.Mono;
-
-import com.supwisdom.infras.security.reactive.basic.EnableInfrasBasicWebFluxApi;
+import com.supwisdom.infras.online.doc.configuration.EnableInfrasOnlineDoc;
+import com.supwisdom.institute.backend.common.core.transmit.annotation.EnableSimpleUserTransmit;
 import com.supwisdom.institute.backend.common.framework.exception.EnableCustomExceptionHandler;
 
-import static org.springframework.web.cors.CorsConfiguration.ALL;
-
 @SpringBootApplication
+@EnableFeignClients
 
+@EnableSimpleUserTransmit
 @EnableCustomExceptionHandler
 
-//@EnableInfrasOnlineDoc
-
-//@EnableInfrasCasSecurity
-
-//@EnableInfrasBasicApi
-//@EnableInfrasJWTApi
-
-@EnableInfrasBasicWebFluxApi
+@EnableInfrasOnlineDoc
 public class Application {
 
   public static void main(String[] args) {
     SpringApplication.run(Application.class, args);
   }
   
-//  @Bean
-//  public CorsFilter corsFilter() {
-//    final CorsConfiguration config = new CorsConfiguration();
-//    //config.setAllowCredentials(true);
-//    config.addAllowedOrigin("*");
-//    config.addAllowedHeader("*");
-//    config.addAllowedMethod("*");
-//
-//    final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
-//    source.registerCorsConfiguration("/v2/api-docs", config);
-//    source.registerCorsConfiguration("/api/**", config);  // 对 /api/** 下的请求，支持 cors 跨域请求，如不需要可以注释
-//
-//    return new CorsFilter(source);
-//  }
-
   @Bean
-  public WebFilter corsFilter() {
-    return (ServerWebExchange ctx, WebFilterChain chain) -> {
-      ServerHttpRequest request = ctx.getRequest();
-      if (!CorsUtils.isCorsRequest(request)) {
-        return chain.filter(ctx);
-      }
-      HttpHeaders requestHeaders = request.getHeaders();
-      ServerHttpResponse response = ctx.getResponse();
-      HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod();
-      HttpHeaders headers = response.getHeaders();
-      headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin());
-      headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders.getAccessControlRequestHeaders());
-      if (requestMethod != null) {
-        headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name());
-      }
-      headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
-      headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, ALL);
-      // headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE, MAX_AGE);
-      if (request.getMethod() == HttpMethod.OPTIONS) {
-        response.setStatusCode(HttpStatus.OK);
-        return Mono.empty();
-      }
-      return chain.filter(ctx);
-    };
+  public CorsFilter corsFilter() {
+    final CorsConfiguration config = new CorsConfiguration();
+    // config.setAllowCredentials(true);
+    config.addAllowedOrigin("*");
+    config.addAllowedHeader("*");
+    config.addAllowedMethod("*");
+
+    final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+    source.registerCorsConfiguration("/v2/api-docs", config);
+
+    return new CorsFilter(source);
   }
 
 }
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/.gitkeep b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/.gitkeep
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/base/AdminBaseController.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/base/AdminBaseController.java
new file mode 100644
index 0000000..62927da
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/base/AdminBaseController.java
@@ -0,0 +1,19 @@
+package com.supwisdom.institute.backend.admin.bff.apis.controller.base;
+
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.common.core.transmit.user.UserContext;
+
+@RestController
+@RequestMapping(value = "/v1/admin/base")
+public class AdminBaseController {
+  
+  @RequestMapping(method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public String hello() {
+    return "hello, " + UserContext.getUsername();
+  }
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/biz/AdminBizController.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/biz/AdminBizController.java
new file mode 100644
index 0000000..8ce27ec
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/biz/AdminBizController.java
@@ -0,0 +1,26 @@
+package com.supwisdom.institute.backend.admin.bff.apis.controller.biz;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.admin.bff.apis.service.biz.BizService;
+
+@RestController
+@RequestMapping(value = "/api/bff/v1/admin/biz")
+public class AdminBizController {
+  
+  @Autowired
+  BizService bizService;
+
+  @RequestMapping(method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public String biz() {
+    
+    bizService.query(true, -1, -1);
+    
+    return "biz";
+  }
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/.gitkeep b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/.gitkeep
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/biz/Biz.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/biz/Biz.java
new file mode 100644
index 0000000..f1d904e
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/biz/Biz.java
@@ -0,0 +1,37 @@
+package com.supwisdom.institute.backend.admin.bff.apis.model.biz;
+
+import java.util.Date;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.model.ABaseModel;
+
+public class Biz extends ABaseModel {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 8755876583168251137L;
+  
+  @Getter
+  @Setter
+  private String id;
+
+  @Getter
+  @Setter
+  private String name;
+  
+  @Getter
+  @Setter
+  private Boolean bool;
+  
+  @Getter
+  @Setter
+  private Date date;
+
+  @Getter
+  @Setter
+  private Integer num;
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/.gitkeep b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/.gitkeep
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/configuration/BaseFeignClientConfiguration.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/configuration/BaseFeignClientConfiguration.java
new file mode 100644
index 0000000..3b327f5
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/configuration/BaseFeignClientConfiguration.java
@@ -0,0 +1,36 @@
+package com.supwisdom.institute.backend.admin.bff.apis.remote.base.configuration;
+
+import org.apache.http.conn.HttpClientConnectionManager;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.commons.httpclient.ApacheHttpClientFactory;
+import org.springframework.context.annotation.Bean;
+
+import com.supwisdom.institute.backend.common.core.feign.FeignClientBuilder;
+
+import feign.Client;
+
+public class BaseFeignClientConfiguration {
+
+  @Bean
+  public Client feignClient(
+      @Value("${sw-backend-base-api.client-auth.enabled:false}") boolean enabled,
+      @Value("${sw-backend-base-api.client-auth.key-password:}") String keyPassword,
+      @Value("${sw-backend-base-api.client-auth.key-store:}") String keyStore,
+      @Value("${sw-backend-base-api.client-auth.key-store-password:}") String keyStorePassword,
+      @Value("${sw-backend-base-api.client-auth.trust-store:}") String trustStore,
+      @Value("${sw-backend-base-api.client-auth.trust-store-password:}") String trustStorePassword,
+      ApacheHttpClientFactory httpClientFactory,
+      HttpClientConnectionManager httpClientConnectionManager) {
+    
+    return FeignClientBuilder.builder()
+        .enabled(enabled)
+        .keyPassword(keyPassword)
+        .keyStore(keyStore)
+        .keyStorePassword(keyStorePassword)
+        .trustStore(trustStore)
+        .trustStorePassword(trustStorePassword)
+        .build()
+        .apacheHttpClient(httpClientFactory, httpClientConnectionManager);
+  }
+
+}
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/AdminAccountRemoteFallbackFactory.java
new file mode 100644
index 0000000..1ff4981
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AdminAccountRemoteFallbackFactory.java
@@ -0,0 +1,14 @@
+package com.supwisdom.institute.backend.admin.bff.apis.remote.base.v1.admin;
+
+import feign.hystrix.FallbackFactory;
+
+public class AdminAccountRemoteFallbackFactory implements FallbackFactory<AdminAccountRemoteFeignClient> {
+
+  @Override
+  public AdminAccountRemoteFeignClient create(Throwable cause) {
+    return new AdminAccountRemoteFeignClient() {
+      
+    };
+  }
+
+}
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/AdminAccountRemoteFeignClient.java
new file mode 100644
index 0000000..99b04b8
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AdminAccountRemoteFeignClient.java
@@ -0,0 +1,15 @@
+package com.supwisdom.institute.backend.admin.bff.apis.remote.base.v1.admin;
+
+import org.springframework.cloud.openfeign.FeignClient;
+
+import com.supwisdom.institute.backend.admin.bff.apis.remote.base.configuration.BaseFeignClientConfiguration;
+
+@FeignClient(
+    configuration = {BaseFeignClientConfiguration.class},
+    name = "base-admin-account-remote-feign-client",
+    url = "${sw-backend-base-api.uri}/v1/admin/accounts",
+    fallbackFactory = AdminAccountRemoteFallbackFactory.class
+)
+public interface AdminAccountRemoteFeignClient {
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/configuration/BizFeignClientConfiguration.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/configuration/BizFeignClientConfiguration.java
new file mode 100644
index 0000000..04d8547
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/configuration/BizFeignClientConfiguration.java
@@ -0,0 +1,36 @@
+package com.supwisdom.institute.backend.admin.bff.apis.remote.biz.configuration;
+
+import org.apache.http.conn.HttpClientConnectionManager;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.commons.httpclient.ApacheHttpClientFactory;
+import org.springframework.context.annotation.Bean;
+
+import com.supwisdom.institute.backend.common.core.feign.FeignClientBuilder;
+
+import feign.Client;
+
+public class BizFeignClientConfiguration {
+
+  @Bean
+  public Client feignClient(
+      @Value("${sw-backend-biz-api.client-auth.enabled:false}") boolean enabled,
+      @Value("${sw-backend-biz-api.client-auth.key-password:}") String keyPassword,
+      @Value("${sw-backend-biz-api.client-auth.key-store:}") String keyStore,
+      @Value("${sw-backend-biz-api.client-auth.key-store-password:}") String keyStorePassword,
+      @Value("${sw-backend-biz-api.client-auth.trust-store:}") String trustStore,
+      @Value("${sw-backend-biz-api.client-auth.trust-store-password:}") String trustStorePassword,
+      ApacheHttpClientFactory httpClientFactory,
+      HttpClientConnectionManager httpClientConnectionManager) {
+    
+    return FeignClientBuilder.builder()
+      .enabled(enabled)
+      .keyPassword(keyPassword)
+      .keyStore(keyStore)
+      .keyStorePassword(keyStorePassword)
+      .trustStore(trustStore)
+      .trustStorePassword(trustStorePassword)
+      .build()
+      .apacheHttpClient(httpClientFactory, httpClientConnectionManager);
+  }
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/v1/admin/AdminBizRemoteFallbackFactory.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/v1/admin/AdminBizRemoteFallbackFactory.java
new file mode 100644
index 0000000..bd220ef
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/v1/admin/AdminBizRemoteFallbackFactory.java
@@ -0,0 +1,61 @@
+package com.supwisdom.institute.backend.admin.bff.apis.remote.biz.v1.admin;
+
+import org.springframework.stereotype.Component;
+
+import com.alibaba.fastjson.JSONObject;
+import com.supwisdom.institute.backend.admin.bff.apis.model.biz.Biz;
+import com.supwisdom.institute.backend.admin.bff.apis.remote.exception.FallbackError;
+
+import feign.hystrix.FallbackFactory;
+
+@Component
+public class AdminBizRemoteFallbackFactory implements FallbackFactory<AdminBizRemoteFeignClient> {
+
+  @Override
+  public AdminBizRemoteFeignClient create(Throwable cause) {
+    return new AdminBizRemoteFeignClient() {
+
+      @Override
+      public JSONObject query(boolean loadAll, int pageIndex, int pageSize) {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
+
+      @Override
+      public JSONObject load(String id) {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
+
+      @Override
+      public JSONObject create(Biz biz) {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
+
+      @Override
+      public JSONObject update(String id, Biz biz) {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
+
+      @Override
+      public JSONObject delete(String id) {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
+      
+    };
+  }
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/v1/admin/AdminBizRemoteFeignClient.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/v1/admin/AdminBizRemoteFeignClient.java
new file mode 100644
index 0000000..a5628c1
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/v1/admin/AdminBizRemoteFeignClient.java
@@ -0,0 +1,51 @@
+package com.supwisdom.institute.backend.admin.bff.apis.remote.biz.v1.admin;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import com.alibaba.fastjson.JSONObject;
+import com.supwisdom.institute.backend.admin.bff.apis.model.biz.Biz;
+import com.supwisdom.institute.backend.admin.bff.apis.remote.biz.configuration.BizFeignClientConfiguration;
+
+@FeignClient(
+    configuration = {BizFeignClientConfiguration.class},
+    name = "biz-admin-biz-remote-feign-client",
+    url = "${sw-backend-biz-api.uri}/v1/admin/biz",
+    fallbackFactory = AdminBizRemoteFallbackFactory.class
+)
+public interface AdminBizRemoteFeignClient {
+  
+  @RequestMapping(method = RequestMethod.GET)
+  JSONObject query(
+      @RequestParam(name = "loadAll") boolean loadAll,
+      @RequestParam(name = "pageIndex") int pageIndex,
+      @RequestParam(name = "pageSize") int pageSize
+      
+  );
+  
+  @RequestMapping(method = RequestMethod.GET, path = "/{id}")
+  JSONObject load(
+      @PathVariable(name = "id") String id
+  );
+
+  @RequestMapping(method = RequestMethod.POST)
+  JSONObject create(
+      @RequestBody Biz biz
+  );
+
+  @RequestMapping(method = RequestMethod.PUT, path = "/{id}")
+  JSONObject update(
+      @PathVariable(name = "id") String id,
+      @RequestBody Biz biz
+  );
+  
+  @RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
+  JSONObject delete(
+      @PathVariable(name = "id") String id
+  );
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/exception/FallbackError.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/exception/FallbackError.java
new file mode 100644
index 0000000..debd57d
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/exception/FallbackError.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.admin.bff.apis.remote.exception;
+
+import com.alibaba.fastjson.JSONObject;
+
+public class FallbackError {
+  
+  private FallbackError() {
+    
+  }
+  
+  public static JSONObject defaultErrorJson(Throwable cause) {
+    JSONObject error = new JSONObject();
+    
+    error.put("code", -1);
+    error.put("message", cause.getMessage());
+    error.put("error", cause.getMessage());
+    
+    return error;
+  }
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/.gitkeep b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/.gitkeep
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/biz/BizService.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/biz/BizService.java
new file mode 100644
index 0000000..2ed6c10
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/biz/BizService.java
@@ -0,0 +1,32 @@
+package com.supwisdom.institute.backend.admin.bff.apis.service.biz;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.supwisdom.institute.backend.admin.bff.apis.remote.biz.v1.admin.AdminBizRemoteFeignClient;
+import com.supwisdom.institute.backend.admin.bff.apis.vo.biz.response.data.BizQueryResponseData;
+
+@Service
+public class BizService {
+  
+  @Autowired
+  private AdminBizRemoteFeignClient bizRemote;
+  
+  public BizQueryResponseData query(boolean loadAll, int pageIndex, int pageSize) {
+    
+    JSONObject jsonObject = bizRemote.query(loadAll, pageIndex, pageSize);
+    if (jsonObject == null) {
+      return null;
+    }
+    
+    if (jsonObject.getIntValue("code") == 0) {
+      JSONObject data = jsonObject.getJSONObject("data");
+      
+      return data.toJavaObject(BizQueryResponseData.class);
+    }
+    
+    return null;
+  }
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/.gitkeep b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/.gitkeep
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/biz/response/data/BizQueryResponseData.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/biz/response/data/BizQueryResponseData.java
new file mode 100644
index 0000000..cc9c465
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/biz/response/data/BizQueryResponseData.java
@@ -0,0 +1,45 @@
+package com.supwisdom.institute.backend.admin.bff.apis.vo.biz.response.data;
+
+import java.util.List;
+import java.util.Map;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.admin.bff.apis.model.biz.Biz;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+public class BizQueryResponseData implements IApiQueryResponseData<Biz> {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -380945463584664943L;
+
+  @Getter
+  private boolean loadAll;
+  @Getter
+  private int pageIndex;
+  @Getter
+  private int pageSize;
+  @Getter
+  private Map<String, Object> mapBean;
+  @Getter
+  private Map<String, String> orderBy;
+  
+  @Getter
+  @Setter
+  private int pageCount;
+  @Getter
+  @Setter
+  private long recordCount;
+  
+  @Getter
+  @Setter
+  private int currentItemCount;
+  
+  @Getter
+  @Setter
+  private List<Biz> items;
+  
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/FeignBasicAuthRequestInterceptor.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/FeignBasicAuthRequestInterceptor.java
new file mode 100644
index 0000000..2a22b46
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/FeignBasicAuthRequestInterceptor.java
@@ -0,0 +1,77 @@
+package com.supwisdom.institute.backend.admin.bff.configuration;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.util.StringUtils;
+
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * feign请求参数转化
+ * @author fengpy
+ */
+@Configuration
+public class FeignBasicAuthRequestInterceptor implements RequestInterceptor {
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    public FeignBasicAuthRequestInterceptor() {}
+
+    @Override
+    public void apply(RequestTemplate template) {
+        ///**get-pojo贯穿*/
+        if (template.method().equals("GET") && template.request().body() != null) {
+            try {
+                JsonNode jsonNode = objectMapper.readTree(template.request().body());
+                //template.body(null);
+                Map<String, Collection<String>> queries = new HashMap<>();
+                //feign 不支持 GET 方法传 POJO, json body转query
+                buildQuery(jsonNode, "", queries);
+                template.queries(queries);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    //处理 get-pojo贯穿
+    private void buildQuery(JsonNode jsonNode, String path, Map<String, Collection<String>> queries) {
+        if (!jsonNode.isContainerNode()) { //叶子节点
+            if (jsonNode.isNull()) {
+                return;
+            }
+            Collection<String> values = queries.get(path);
+            if (null == values) {
+                values = new ArrayList<>();
+                queries.put(path, values);
+            }
+            values.add(jsonNode.asText());
+            return;
+        }
+        if (jsonNode.isArray()) { //数组节点
+            Iterator<JsonNode> it = jsonNode.elements();
+            while (it.hasNext()) {
+                buildQuery(it.next(), path, queries);
+            }
+        } else {
+            Iterator<Map.Entry<String, JsonNode>> it = jsonNode.fields();
+            while (it.hasNext()) {
+                Map.Entry<String, JsonNode> entry = it.next();
+                if (StringUtils.hasText(path)) {
+                    if ("mapBean".equals(path)||"orderBy".equals(path)||"sequence".equals(path)) {
+                        buildQuery(entry.getValue(), path + "[" + entry.getKey() + "]", queries);
+                    } else {
+                        buildQuery(entry.getValue(), path + "." + entry.getKey(), queries);
+                    }
+                } else { //根节点
+                    buildQuery(entry.getValue(), entry.getKey(), queries);
+                }
+            }
+        }
+    }
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/GatewayFilterConfig.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/GatewayFilterConfig.java
deleted file mode 100644
index 5084419..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/GatewayFilterConfig.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.configuration;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import com.supwisdom.institute.backend.admin.bff.gateway.filter.factory.SimpleUserTransmitGatewayFilterFactory;
-
-@Deprecated
-//@Configuration
-public class GatewayFilterConfig {
-
-  @Bean
-  public SimpleUserTransmitGatewayFilterFactory simpleUserTransmitGatewayFilterFactory() {
-    return new SimpleUserTransmitGatewayFilterFactory();
-  }
-  
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/GlobalFilterConfig.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/GlobalFilterConfig.java
deleted file mode 100644
index e9e6282..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/GlobalFilterConfig.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.configuration;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import com.supwisdom.institute.backend.admin.bff.gateway.filter.SimpleUserTransmitGlobalFilter;
-
-@Configuration
-public class GlobalFilterConfig {
-
-  @Bean
-  public SimpleUserTransmitGlobalFilter simpleUserTransmitGlobalFilter() {
-    return new SimpleUserTransmitGlobalFilter();
-  }
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/InfrasFilterSecurityInterceptorConfig.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/InfrasFilterSecurityInterceptorConfig.java
deleted file mode 100644
index 10410c9..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/InfrasFilterSecurityInterceptorConfig.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.configuration;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.access.AccessDecisionManager;
-import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;
-
-//import com.supwisdom.infras.security.web.access.intercept.InfrasFilterSecurityInterceptor;
-import com.supwisdom.institute.backend.admin.bff.security.web.access.MyAccessDecisionManager;
-import com.supwisdom.institute.backend.admin.bff.security.web.access.intercept.InMemeryFilterInvocationSecurityMetadataSource;
-//import com.supwisdom.institute.backend.admin.bff.security.web.access.intercept.MyFilterSecurityInterceptor;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Configuration
-public class InfrasFilterSecurityInterceptorConfig {
-
-//  @Bean
-//  public FilterInvocationSecurityMetadataSource securityMetadataSource() {
-//    MyFilterInvocationSecurityMetadataSource securityMetadataSource = new MyFilterInvocationSecurityMetadataSource();
-//    log.debug("InfrasFilterSecurityInterceptorConfig securityMetadataSource is {}", securityMetadataSource);
-//
-//    return securityMetadataSource;
-//  }
-  
-  @Bean
-  public FilterInvocationSecurityMetadataSource securityMetadataSource() {
-    InMemeryFilterInvocationSecurityMetadataSource securityMetadataSource = new InMemeryFilterInvocationSecurityMetadataSource();
-    log.debug("InfrasFilterSecurityInterceptorConfig securityMetadataSource is {}", securityMetadataSource);
-
-    return securityMetadataSource;
-  }
-  
-  
-  @Bean
-  public AccessDecisionManager accessDecisionManager() {
-    MyAccessDecisionManager accessDecisionManager = new MyAccessDecisionManager();
-    log.debug("InfrasFilterSecurityInterceptorConfig accessDecisionManager is {}", accessDecisionManager);
-
-    return accessDecisionManager;
-  }
-  
-//  @Bean
-//  public InfrasFilterSecurityInterceptor infrasFilterSecurityInterceptor() throws Exception {
-//    MyFilterSecurityInterceptor myFilterSecurityInterceptor = new MyFilterSecurityInterceptor();
-//    myFilterSecurityInterceptor.setRejectPublicInvocations(true);
-//    log.debug("InfrasFilterSecurityInterceptorConfig infrasFilterSecurityInterceptor is {}", myFilterSecurityInterceptor);
-//
-//    return myFilterSecurityInterceptor;
-//  }
-  
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/ListenerConfig.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/ListenerConfig.java
deleted file mode 100644
index 3f94d53..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/ListenerConfig.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.configuration;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;
-
-import com.supwisdom.institute.backend.admin.bff.listener.MyFilterInvocationSecurityMetadataSourceRefreshListener;
-
-@Configuration
-public class ListenerConfig {
-  
-  @Autowired
-  private FilterInvocationSecurityMetadataSource securityMetadataSource;
-  
-  @Bean
-  public ServletListenerRegistrationBean<MyFilterInvocationSecurityMetadataSourceRefreshListener> serssionListenerBean(){
-    MyFilterInvocationSecurityMetadataSourceRefreshListener listener = new MyFilterInvocationSecurityMetadataSourceRefreshListener();
-    listener.setSecurityMetadataSource(securityMetadataSource);
-    
-    ServletListenerRegistrationBean<MyFilterInvocationSecurityMetadataSourceRefreshListener> refreshListener = 
-        new ServletListenerRegistrationBean<MyFilterInvocationSecurityMetadataSourceRefreshListener>(listener);
-    return refreshListener;
-  }
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/PasswordEncoderConfig.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/PasswordEncoderConfig.java
deleted file mode 100644
index b44d152..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/PasswordEncoderConfig.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.configuration;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.crypto.factory.PasswordEncoderFactories;
-import org.springframework.security.crypto.password.DelegatingPasswordEncoder;
-import org.springframework.security.crypto.password.NoOpPasswordEncoder;
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Configuration
-public class PasswordEncoderConfig {
-
-  @Bean
-  public PasswordEncoder passwordEncoder() {
-    
-    PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
-
-    if (passwordEncoder instanceof DelegatingPasswordEncoder) {
-      ((DelegatingPasswordEncoder)passwordEncoder).setDefaultPasswordEncoderForMatches(NoOpPasswordEncoder.getInstance());
-    }
-
-    log.debug("PasswordEncoderConfig passwordEncoder is {}", passwordEncoder);
-    return passwordEncoder;
-  }
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/Swagger2Config.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/Swagger2Config.java
index 9559532..1c8a23b 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/Swagger2Config.java
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/Swagger2Config.java
@@ -1,32 +1,22 @@
 package com.supwisdom.institute.backend.admin.bff.configuration;
 
-import java.util.List;
-
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
 import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.AuthorizationScopeBuilder;
 import springfox.documentation.builders.PathSelectors;
 import springfox.documentation.builders.RequestHandlerSelectors;
 import springfox.documentation.service.ApiInfo;
-import springfox.documentation.service.AuthorizationScope;
-import springfox.documentation.service.BasicAuth;
 import springfox.documentation.service.Contact;
-import springfox.documentation.service.SecurityReference;
-import springfox.documentation.service.SecurityScheme;
 import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spi.service.contexts.SecurityContext;
 import springfox.documentation.spring.web.plugins.Docket;
 import springfox.documentation.swagger.web.UiConfiguration;
 import springfox.documentation.swagger.web.UiConfigurationBuilder;
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
-import static com.google.common.collect.Lists.*;
 
-
-//@Configuration
-//@EnableSwagger2
+@Configuration
+@EnableSwagger2
 public class Swagger2Config {
 
   @Value("${swagger2.apis.basePackage:com.supwisdom.institute}")
@@ -35,8 +25,6 @@
   @Bean
   public Docket createRestApi() {
     return new Docket(DocumentationType.SWAGGER_2)
-        .securitySchemes(securitySchemes())
-        .securityContexts(securityContexts())
         .apiInfo(apiInfo())
         .select()
         .apis(RequestHandlerSelectors.basePackage(basePackage))
@@ -46,36 +34,18 @@
   }
 
   private ApiInfo apiInfo() {
-    Contact contact = new Contact("Backend Admin BFF", "https://sw-backend-api.supwisdom.com/swagger-ui.html", ""); // name, url, email
+    Contact contact = new Contact("Backend Admin Aggregator API", "https://sw-backend-aggr.supwisdom.com/swagger-ui.html", ""); // name, url, email
     return new ApiInfoBuilder()
-        .title("Backend Admin BFF APIs")
-        .description("管理后台 - 后端接口")
+        .title("Backend Admin Aggregator APIs")
+        .description("管理后台 - 聚合接口")
         .termsOfServiceUrl("http://www.supwisdom.com/")
         .contact(contact)
         .version("1.0")
         .build();
   }
-  
-  private List<SecurityScheme> securitySchemes() {
-    return newArrayList(new BasicAuth("sample"));
-  }
-  
-  private List<SecurityContext> securityContexts() {
-    AuthorizationScope[] authScopes = new AuthorizationScope[1];
-    authScopes[0] = new AuthorizationScopeBuilder()
-            .scope("read")
-            .description("read access")
-            .build();
-    SecurityReference securityReference = SecurityReference.builder()
-            .reference("sample")
-            .scopes(authScopes)
-            .build();
-    
-    return newArrayList(SecurityContext.builder().securityReferences(newArrayList(securityReference)).build());
-  }
 
   @Bean
-  public UiConfiguration uiConfig() {
+  UiConfiguration uiConfig() {
     
     return UiConfigurationBuilder.builder().build();
     
@@ -89,26 +59,5 @@
 //        60000L); // requestTimeout => in milliseconds, defaults to null
 //    // (uses jquery xh timeout)
   }
-  
-  
-//  @Bean
-//  public SecurityConfiguration oauth2() {
-//      return SecurityConfigurationBuilder.builder()
-//          .clientId("common")
-//          .clientSecret("secret")
-//          .scopeSeparator(" ")
-//          .useBasicAuthenticationWithAccessCodeGrant(true)
-//          .build();
-//  }
-//  
-//  @Bean
-//  public SecurityConfiguration basic() {
-//      return SecurityConfigurationBuilder.builder()
-//          .clientId("common")
-//          .clientSecret("secret")
-//          .scopeSeparator(" ")
-//          .useBasicAuthenticationWithAccessCodeGrant(true)
-//          .build();
-//  }
 
 }
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/UserDetailsServiceConfig.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/UserDetailsServiceConfig.java
deleted file mode 100644
index 63945f4..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/UserDetailsServiceConfig.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.configuration;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import com.supwisdom.institute.backend.admin.bff.security.core.userdetails.InMemeryUserDetailsService;
-import com.supwisdom.institute.backend.admin.bff.security.core.userdetails.MyUserDetailsService;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Configuration
-public class UserDetailsServiceConfig {
-
-//  @Bean
-//  public MyUserDetailsService userDetailsService() throws Exception {
-//    MyUserDetailsService myUserDetailsService = new MyUserDetailsService();
-//    log.debug("UserDetailsServiceConfig myUserDetailsService is {}", myUserDetailsService);
-//
-//    return myUserDetailsService;
-//  }
-
-  @Bean
-  public InMemeryUserDetailsService userDetailsService() throws Exception {
-    InMemeryUserDetailsService inMemeryUserDetailsService = new InMemeryUserDetailsService();
-    log.debug("UserDetailsServiceConfig inMemeryUserDetailsService is {}", inMemeryUserDetailsService);
-
-    return inMemeryUserDetailsService;
-  }
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/gateway/filter/SimpleUserTransmitGlobalFilter.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/gateway/filter/SimpleUserTransmitGlobalFilter.java
deleted file mode 100644
index a9bf2ae..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/gateway/filter/SimpleUserTransmitGlobalFilter.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.gateway.filter;
-
-import java.net.URLDecoder;
-
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.cloud.gateway.filter.GatewayFilterChain;
-import org.springframework.cloud.gateway.filter.GlobalFilter;
-import org.springframework.core.Ordered;
-import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.ReactiveSecurityContextHolder;
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.web.server.ServerWebExchange;
-
-import com.alibaba.fastjson.JSONObject;
-import com.supwisdom.institute.backend.admin.bff.security.core.userdetails.MyUser;
-import com.supwisdom.institute.backend.common.core.transmit.user.User;
-import com.supwisdom.institute.backend.common.core.transmit.user.UserContext;
-
-import reactor.core.publisher.Mono;
-
-@Slf4j
-public class SimpleUserTransmitGlobalFilter implements GlobalFilter, Ordered {
-
-  @Override
-  public int getOrder() {
-    return 0;
-  }
-
-  @Override
-  public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-    
-    return ReactiveSecurityContextHolder.getContext()
-      .filter(c -> c.getAuthentication() != null && c.getAuthentication().isAuthenticated() && c.getAuthentication().getPrincipal() instanceof MyUser)
-      .map(SecurityContext::getAuthentication)
-      .map(Authentication::getPrincipal)
-      .cast(MyUser.class)
-      .map(myUser -> {
-        try {
-          User user = new User(myUser.getUsername(), myUser.getRoles(), myUser.getAttributes());
-          
-          String jsonUser = JSONObject.toJSONString(user);
-          log.info(jsonUser);
-          String headerValue = new String(URLDecoder.decode(jsonUser,"UTF-8"));
-          ServerHttpRequest request = exchange.getRequest().mutate()
-              .header(UserContext.KEY_USER_IN_HTTP_HEADER, headerValue)
-              .build();
-          log.debug("User set ok");
-          return exchange.mutate().request(request).build();
-        } catch (Exception e) {
-          log.warn("User set error", e);
-        }
-        return exchange;
-      })
-      .flatMap(ex -> chain.filter(ex))
-    ;
-  }
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/gateway/filter/factory/SimpleUserTransmitGatewayFilterFactory.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/gateway/filter/factory/SimpleUserTransmitGatewayFilterFactory.java
deleted file mode 100644
index 68b6ad3..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/gateway/filter/factory/SimpleUserTransmitGatewayFilterFactory.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.gateway.filter.factory;
-
-import java.net.URLDecoder;
-
-import lombok.Getter;
-import lombok.Setter;
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.cloud.gateway.filter.GatewayFilter;
-import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
-import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.ReactiveSecurityContextHolder;
-import org.springframework.security.core.context.SecurityContext;
-
-import com.alibaba.fastjson.JSONObject;
-import com.supwisdom.institute.backend.admin.bff.security.core.userdetails.MyUser;
-import com.supwisdom.institute.backend.common.core.transmit.user.User;
-import com.supwisdom.institute.backend.common.core.transmit.user.UserContext;
-
-@Deprecated
-@Slf4j
-public class SimpleUserTransmitGatewayFilterFactory extends AbstractGatewayFilterFactory<SimpleUserTransmitGatewayFilterFactory.Config> {
-  
-  public SimpleUserTransmitGatewayFilterFactory() {
-    super(Config.class);
-  }
-
-  @Override
-  public GatewayFilter apply(Config config) {
-    return (exchange, chain) -> {
-      
-      
-//      Mono<ServerWebExchange> m = Mono.fromCallable(() ->{
-//        MyUser myUser = ReactiveSecurityContextHolder.getContext()
-//            .filter(c -> c.getAuthentication() != null)
-//            .map(SecurityContext::getAuthentication)
-//            .map(Authentication::getPrincipal)
-//            .cast(MyUser.class)
-//            .block()
-//          ;
-//          try {
-//            String jsonUser = JSONObject.toJSONString(myUser);
-//            log.info(jsonUser);
-//            String headerValue = new String(URLDecoder.decode(jsonUser,"UTF-8"));
-//            ServerHttpRequest request = exchange.getRequest().mutate()
-//                .header(UserContext.KEY_USER_IN_HTTP_HEADER, headerValue)
-//                .build();
-//            log.debug("User set ok");
-//            return exchange.mutate().request(request).build();
-//          } catch (Exception e) {
-//            log.warn("User set error", e);
-//          }
-//          return exchange;
-//      })
-//      .publishOn(Schedulers.elastic())
-//      ;
-//      return m.flatMap(ex -> chain.filter(ex));
-
-      
-      return ReactiveSecurityContextHolder.getContext()
-          .filter(c -> c.getAuthentication() != null && c.getAuthentication().isAuthenticated() && c.getAuthentication().getPrincipal() instanceof MyUser)
-          .map(SecurityContext::getAuthentication)
-          .map(Authentication::getPrincipal)
-          .cast(MyUser.class)
-          .map(myUser -> {
-            try {
-              User user = new User(myUser.getUsername(), myUser.getRoles(), myUser.getAttributes());
-              
-              String jsonUser = JSONObject.toJSONString(user);
-              log.info(jsonUser);
-              String headerValue = new String(URLDecoder.decode(jsonUser,"UTF-8"));
-              ServerHttpRequest request = exchange.getRequest().mutate()
-                  .header(UserContext.KEY_USER_IN_HTTP_HEADER, headerValue)
-                  .build();
-              log.debug("User set ok");
-              return exchange.mutate().request(request).build();
-            } catch (Exception e) {
-              log.warn("User set error", e);
-            }
-            return exchange;
-          })
-          .flatMap(ex -> chain.filter(ex))
-        ;
-    };
-  }
-
-  public static class Config {
-    @Getter
-    @Setter
-    private String a;
-  }
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/gateway/route/CustomRouteLocator.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/gateway/route/CustomRouteLocator.java
deleted file mode 100644
index fc90c15..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/gateway/route/CustomRouteLocator.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.gateway.route;
-
-import org.springframework.cloud.gateway.route.Route;
-import org.springframework.cloud.gateway.route.RouteLocator;
-
-import reactor.core.publisher.Flux;
-
-public class CustomRouteLocator implements RouteLocator {
-
-  @Override
-  public Flux<Route> getRoutes() {
-    // TODO Auto-generated method stub
-    return null;
-  }
-
-  
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/listener/MyFilterInvocationSecurityMetadataSourceRefreshListener.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/listener/MyFilterInvocationSecurityMetadataSourceRefreshListener.java
deleted file mode 100644
index 2c6d2bd..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/listener/MyFilterInvocationSecurityMetadataSourceRefreshListener.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.listener;
-
-import java.util.Timer;
-import java.util.TimerTask;
-
-import javax.servlet.ServletContextEvent;
-
-import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;
-import org.springframework.web.context.ContextLoaderListener;
-
-import com.supwisdom.institute.backend.admin.bff.security.web.access.intercept.MyFilterInvocationSecurityMetadataSource;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class MyFilterInvocationSecurityMetadataSourceRefreshListener extends ContextLoaderListener {
-
-  private FilterInvocationSecurityMetadataSource securityMetadataSource;
-  public void setSecurityMetadataSource(FilterInvocationSecurityMetadataSource securityMetadataSource) {
-    this.securityMetadataSource = securityMetadataSource;
-  }
-
-  private Timer timer = null;
-
-  private int delay = 1; // 启动后，延迟1分钟
-  private int period = 2; // 定时，每隔2分钟
-
-  @Override
-  public void contextInitialized(ServletContextEvent event) {
-    // super.contextInitialized(event);
-    log.info("MyFilterInvocationSecurityMetadataSourceRefreshListener.contextInitialized");
-
-    if (securityMetadataSource instanceof MyFilterInvocationSecurityMetadataSource) {
-      timer = new Timer("定时刷新权限信息", true);
-
-      timer.scheduleAtFixedRate(new TimerTask() {
-
-        @Override
-        public void run() {
-          ((MyFilterInvocationSecurityMetadataSource) securityMetadataSource).refreshRequestMap();
-        }
-
-      }, 1000 * 60 * delay, 1000 * 60 * period);
-
-    }
-
-  }
-
-  @Override
-  public void contextDestroyed(ServletContextEvent event) {
-    // super.contextDestroyed(event);
-    log.info("MyFilterInvocationSecurityMetadataSourceRefreshListener.contextDestroyed");
-
-    if (timer != null) {
-      timer.cancel();
-    }
-  }
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/core/userdetails/InMemeryUserDetailsService.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/core/userdetails/InMemeryUserDetailsService.java
deleted file mode 100644
index bfe9a21..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/core/userdetails/InMemeryUserDetailsService.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.security.core.userdetails;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-import com.supwisdom.institute.backend.common.core.transmit.user.User;
-import com.supwisdom.institute.backend.common.core.transmit.user.UserContext;
-
-import reactor.core.publisher.Mono;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class InMemeryUserDetailsService implements UserDetailsService, ReactiveUserDetailsService {
-
-  @Autowired
-  PasswordEncoder passwordEncoder;
-  
-  @Override
-  public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
-    
-    log.debug("InMemeryUserDetailsService.loadUserByUsername({})", username);
-    
-    List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
-    authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
-    authorities.add(new SimpleGrantedAuthority("administrator"));
-    authorities.add(new SimpleGrantedAuthority("user"));
-
-    Map<String, Object> attributes = new HashMap<String, Object>();
-    
-    MyUser myUser = new MyUser(username, passwordEncoder.encode(username), authorities, attributes);
-    log.debug("myUser is {}", myUser);
-    
-    return myUser;
-  }
-
-  @Override
-  public Mono<UserDetails> findByUsername(String username) {
-
-    log.debug("InMemeryUserDetailsService.findByUsername({})", username);
-    
-    List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
-    authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
-    authorities.add(new SimpleGrantedAuthority("administrator"));
-    authorities.add(new SimpleGrantedAuthority("user"));
-
-    Map<String, Object> attributes = new HashMap<String, Object>();
-    
-    MyUser myUser = new MyUser(username, passwordEncoder.encode(username), authorities, attributes);
-    log.debug("myUser is {}", myUser);
-    
-    List<String> roles = new ArrayList<>();
-    roles.add("ROLE_ADMIN");
-    roles.add("administrator");
-    roles.add("user");
-    User user = new User(username, roles, attributes);
-    UserContext.setUser(user);
-    
-    return Mono.just(myUser);
-  }
-  
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/core/userdetails/MyUser.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/core/userdetails/MyUser.java
deleted file mode 100644
index b662422..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/core/userdetails/MyUser.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.security.core.userdetails;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.userdetails.User;
-
-public class MyUser extends User {
-
-  /**
-   * 
-   */
-  private static final long serialVersionUID = 3195151947212484499L;
-
-  public MyUser(String username, String password, 
-      Collection<? extends GrantedAuthority> authorities, 
-      Map<String, Object> attributes) {
-    this(username, password, true, true, true, true, authorities, attributes);
-  }
-
-  public MyUser(String username, String password, 
-      boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, 
-      Collection<? extends GrantedAuthority> authorities, 
-      Map<String, Object> attributes) {
-    super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
-    
-    this.attributes = attributes;
-  }
-
-  private final Map<String, Object> attributes;
-  public Map<String, Object> getAttributes() {
-    return this.attributes;
-  }
-  
-  public List<String> getRoles() {
-    List<String> roles = new ArrayList<>();
-    for (GrantedAuthority grantedAuthority : this.getAuthorities()) {
-      roles.add(grantedAuthority.getAuthority());
-    }
-    
-    return roles;
-  }
-  
-
-  public Object getAttribute(String key) {
-    if (attributes == null) {
-      return null;
-    }
-    
-    if (!attributes.containsKey(key)) {
-      return null;
-    }
-    
-    return attributes.get(key);
-  }
-  
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/core/userdetails/MyUserDetailsService.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/core/userdetails/MyUserDetailsService.java
deleted file mode 100644
index 110af6b..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/core/userdetails/MyUserDetailsService.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.security.core.userdetails;
-
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-import reactor.core.publisher.Mono;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class MyUserDetailsService implements UserDetailsService, ReactiveUserDetailsService {
-  
-  @Autowired
-  PasswordEncoder passwordEncoder;
-
-//  @Autowired
-//  AccountService accountService;
-  
-  @Override
-  public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // TODO: 
-
-    log.debug("MyUserDetailsService.loadUserByUsername({})", username);
-    
-//    Account account = accountService.loadByUsername(username);
-//    if (account == null) {
-//      throw new UsernameNotFoundException(String.format("%s not found", username));
-//    }
-//    
-//    List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
-////    for (Role role : securityUser.getRoles()) {
-////      authorities.add(new SimpleGrantedAuthority(role.getCode()));
-////    }
-//    // FIXME: 
-//    authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
-//    authorities.add(new SimpleGrantedAuthority("administrator"));
-//    authorities.add(new SimpleGrantedAuthority("user"));
-//    
-//    Map<String, Object> attributes = new HashMap<String, Object>();
-//    attributes.put("userId", account.getUser().getId());
-//    attributes.put("userUid", account.getUser().getUid());
-//    
-//    MyUser myUser = new MyUser(
-//        account.getAccountName(), 
-//        account.getUser().getPassWord(), 
-//        account.getActivation() && "Normal".equals(account.getState()) ? true : false, 
-//        account.getAccountExpiryDate() == null || Calendar.getInstance().getTime().before(account.getAccountExpiryDate()) ? true : false,
-//        true, 
-//        true, 
-//        authorities,
-//        attributes);
-//    
-//    log.debug("myUser is {}", myUser);
-    
-    MyUser myUser = null;
-    
-    return myUser;
-  }
-
-  @Override
-  public Mono<UserDetails> findByUsername(String username) {
-    log.debug("MyUserDetailsService.findByUsername({})", username);
-    
-    MyUser myUser = null;
-    
-    return Mono.just(myUser);
-  }
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/web/access/MyAccessDecisionManager.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/web/access/MyAccessDecisionManager.java
deleted file mode 100644
index 56fe469..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/web/access/MyAccessDecisionManager.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.security.web.access;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.springframework.security.access.AccessDecisionManager;
-import org.springframework.security.access.AccessDeniedException;
-import org.springframework.security.access.ConfigAttribute;
-import org.springframework.security.authentication.InsufficientAuthenticationException;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.GrantedAuthority;
-
-public class MyAccessDecisionManager implements AccessDecisionManager {
-
-  @Override
-  public void decide(Authentication authentication, Object object, Collection<ConfigAttribute> configAttributes)
-      throws AccessDeniedException, InsufficientAuthenticationException {
-
-    if (null == configAttributes || configAttributes.size() <= 0) {
-      return;
-    }
-    
-    ConfigAttribute ca;
-    String needRole;
-    for (Iterator<ConfigAttribute> iter = configAttributes.iterator(); iter.hasNext();) {
-      ca = iter.next();
-      needRole = ca.getAttribute();
-      for (GrantedAuthority ga : authentication.getAuthorities()) { // authentication 为在注释1 中循环添加到 GrantedAuthority 对象中的权限信息集合
-        if (needRole.trim().equals(ga.getAuthority())) {
-          return;
-        }
-      }
-    }
-    
-    throw new AccessDeniedException("no right");
-  }
-
-  @Override
-  public boolean supports(ConfigAttribute attribute) {
-    return true;
-  }
-
-  @Override
-  public boolean supports(Class<?> clazz) {
-    return true;
-  }
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/web/access/intercept/InMemeryFilterInvocationSecurityMetadataSource.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/web/access/intercept/InMemeryFilterInvocationSecurityMetadataSource.java
deleted file mode 100644
index 5666b1a..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/web/access/intercept/InMemeryFilterInvocationSecurityMetadataSource.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.security.web.access.intercept;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.security.access.ConfigAttribute;
-import org.springframework.security.access.SecurityConfig;
-import org.springframework.security.web.FilterInvocation;
-import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;
-import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
-import org.springframework.security.web.util.matcher.RequestMatcher;
-
-public class InMemeryFilterInvocationSecurityMetadataSource implements FilterInvocationSecurityMetadataSource {
-  
-  private Map<RequestMatcher, Collection<ConfigAttribute>> requestMap = null;
-  
-  private void loadRequestMap() {
-    if (requestMap == null) {
-      requestMap = new LinkedHashMap<RequestMatcher, Collection<ConfigAttribute>>();
-      
-      AntPathRequestMatcher requestMatcher0 = new AntPathRequestMatcher("/api/**");
-      Collection<ConfigAttribute> attributes0 = new ArrayList<ConfigAttribute>();  // FIXME: 返回当前请求的url 对应的 角色代码
-      attributes0.add(new SecurityConfig("user"));
-      requestMap.put(requestMatcher0, attributes0);
-
-      
-      AntPathRequestMatcher requestMatcher = new AntPathRequestMatcher("/web/**");
-      Collection<ConfigAttribute> attributes = new ArrayList<ConfigAttribute>();  // FIXME: 返回当前请求的url 对应的 角色代码
-      attributes.add(new SecurityConfig("user"));
-      requestMap.put(requestMatcher, attributes);
-    }
-  }
-
-  /**
-   * 获取当前请求关联的所有角色code {@link SecurityConfig} 
-   * 用于和用户拥有的角色code 进行比对
-   */
-  @Override
-  public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {
-    
-    if (requestMap == null) {
-      loadRequestMap();
-    }
-
-    HttpServletRequest request = ((FilterInvocation) object).getHttpRequest();
-    
-    RequestMatcher requestMatcher;
-    for(Iterator<RequestMatcher> iter = requestMap.keySet().iterator(); iter.hasNext(); ) {
-      requestMatcher = iter.next();
-      
-      if(requestMatcher.matches(request)) {
-        return requestMap.get(requestMatcher);
-      }
-    }
-    
-    return null;
-  }
-
-  @Override
-  public Collection<ConfigAttribute> getAllConfigAttributes() {
-
-    return null;
-  }
-
-  @Override
-  public boolean supports(Class<?> clazz) {
-
-    return true;
-  }
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/web/access/intercept/MyFilterInvocationSecurityMetadataSource.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/web/access/intercept/MyFilterInvocationSecurityMetadataSource.java
deleted file mode 100644
index 90f4b53..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/security/web/access/intercept/MyFilterInvocationSecurityMetadataSource.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.security.web.access.intercept;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.ConfigAttribute;
-import org.springframework.security.access.SecurityConfig;
-import org.springframework.security.web.FilterInvocation;
-import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;
-import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
-import org.springframework.security.web.util.matcher.RequestMatcher;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class MyFilterInvocationSecurityMetadataSource implements FilterInvocationSecurityMetadataSource {
-  
-//  @Autowired
-//  User1SecurityPermissionRemoteService user1SecurityPermissionRemoteService;
-
-  private Map<RequestMatcher, Collection<ConfigAttribute>> requestMap = null;
-
-  public void refreshRequestMap() {
-    
-    log.info("MyFilterInvocationSecurityMetadataSource.refreshRequestMap");
-    
-    requestMap = null;
-    loadRequestMap();
-  }
-  
-  private void loadRequestMap() {
-    synchronized (MyFilterInvocationSecurityMetadataSource.class) {
-
-      if (requestMap == null) {
-        requestMap = new LinkedHashMap<RequestMatcher, Collection<ConfigAttribute>>();
-        
-//        String applicationCode = Constants.APPLICATION_CODE;
-//        SecurityPermission securityPermission = user1SecurityPermissionRemoteService.loadPermissionsByAppcode(applicationCode, null);
-//        if (securityPermission == null) {
-//          return;
-//        }
-//  
-//        Map<String, String> mapRoles = new HashMap<String, String>();
-//        for (Role r : securityPermission.getRoles()) {
-//          mapRoles.put(r.getId(), r.getCode());
-//        }
-//  
-//        Map<String, Collection<ConfigAttribute>> permissionRoles = new HashMap<String, Collection<ConfigAttribute>>();
-//        for (RolePermission rp : securityPermission.getRolePermissions()) {
-//          if (mapRoles.containsKey(rp.getRoleId())) {
-//            if (!permissionRoles.containsKey(rp.getPermissionId())) {
-//              permissionRoles.put(rp.getPermissionId(), new ArrayList<ConfigAttribute>());
-//            }
-//            ConfigAttribute ca = new SecurityConfig(mapRoles.get(rp.getRoleId()));
-//            permissionRoles.get(rp.getPermissionId()).add(ca);
-//          }
-//        }
-//  
-//        for (Permission p : securityPermission.getPermissions()) {
-//          Collection<ConfigAttribute> attributes = permissionRoles.get(p.getId());
-//          if (attributes == null) {
-//            attributes = new ArrayList<ConfigAttribute>();
-//          }
-//          
-//          if (p.getUrl() == null || p.getUrl().isEmpty()) {
-//            continue;
-//          }
-//          
-//          String pattern = p.getUrl();
-//          String httpMethod = null;
-//          
-//          if (pattern.startsWith("GET ") || pattern.startsWith("POST ") || pattern.startsWith("PUT ") || pattern.startsWith("DELETE ")) {
-//            httpMethod = pattern.substring(0, pattern.indexOf(" "));
-//            pattern = pattern.substring(pattern.indexOf(" ")+1);
-//          }
-//          
-//          AntPathRequestMatcher requestMatcher = new AntPathRequestMatcher(pattern, httpMethod);
-//  
-//          requestMap.put(requestMatcher, attributes);
-//        }
-      }
-      
-    }
-  }
-
-  /**
-   * 获取当前请求关联的所有角色code {@link SecurityConfig} 用于和用户拥有的角色code 进行比对
-   */
-  @Override
-  public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {
-
-    if (requestMap == null) {
-      loadRequestMap();
-    }
-
-    HttpServletRequest request = ((FilterInvocation) object).getHttpRequest();
-
-    RequestMatcher requestMatcher;
-    for (Iterator<RequestMatcher> iter = requestMap.keySet().iterator(); iter.hasNext();) {
-      requestMatcher = iter.next();
-
-      if (requestMatcher.matches(request)) {
-        return requestMap.get(requestMatcher);
-      }
-    }
-
-    return null;
-  }
-
-  @Override
-  public Collection<ConfigAttribute> getAllConfigAttributes() {
-
-    return null;
-  }
-
-  @Override
-  public boolean supports(Class<?> clazz) {
-
-    return true;
-  }
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/utils/AuthenticationUtil.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/utils/AuthenticationUtil.java
deleted file mode 100644
index b2ab8e8..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/utils/AuthenticationUtil.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.utils;
-
-import java.util.Collection;
-
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.context.SecurityContextHolder;
-
-import com.supwisdom.institute.backend.admin.bff.security.core.userdetails.MyUser;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class AuthenticationUtil {
-
-  public static String currentUsername() {
-
-    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
-
-    if (authentication == null) {
-      log.error("authentication is null");
-      return null;
-    }
-
-    log.debug("authentication is {}", authentication.getPrincipal());
-
-    if (!authentication.isAuthenticated()) {
-      log.error("authentication is not authenticated");
-      return null;
-    }
-
-    if (authentication.getPrincipal() == null) {
-      log.error("authentication's principal is null");
-      return null;
-    }
-
-    log.debug("authentication's principal is {}", authentication.getPrincipal());
-
-    if (authentication.getPrincipal() instanceof MyUser) {
-      return ((MyUser) authentication.getPrincipal()).getUsername();
-    }
-
-    return null;
-  }
-
-  public static MyUser currentUser() {
-
-    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
-
-    if (authentication == null) {
-      log.error("authentication is null");
-      return null;
-    }
-
-    log.debug("authentication is {}", authentication.getPrincipal());
-
-    if (!authentication.isAuthenticated()) {
-      log.error("authentication is not authenticated");
-      return null;
-    }
-
-    if (authentication.getPrincipal() == null) {
-      log.error("authentication's principal is null");
-      return null;
-    }
-
-    log.debug("authentication's principal is {}", authentication.getPrincipal());
-
-    if (authentication.getPrincipal() instanceof MyUser) {
-      return (MyUser) authentication.getPrincipal();
-    }
-
-    return null;
-  }
-
-  public static boolean isAdministrator() {
-    MyUser myUser = AuthenticationUtil.currentUser();
-    if (myUser != null) {
-      Collection<GrantedAuthority> grantedAuthoritys = myUser.getAuthorities();
-      if (grantedAuthoritys != null && grantedAuthoritys.size() > 0) {
-        for (GrantedAuthority grantedAuthority : grantedAuthoritys) {
-          if ("administrator".equals(grantedAuthority.getAuthority())) {
-            return true;
-          }
-        }
-      }
-    }
-    return false;
-  }
-
-}
diff --git a/bff/admin/src/main/resources/application-docker.yml b/bff/admin/src/main/resources/application-docker.yml
index 9fb465a..78c8a3d 100644
--- a/bff/admin/src/main/resources/application-docker.yml
+++ b/bff/admin/src/main/resources/application-docker.yml
@@ -33,41 +33,7 @@
 
 
 ##
-# spring cloud gateway
-#
-  cloud:
-    gateway:
-      metrics:
-        enabled: true
-      routes:
-      - id: aggr-api
-        uri: ${SW_BACKEND_AGGR_API_URI:https://sw-backend-admin-aggr}
-        predicates:
-        - Path=/api/aggr/**
-        filters:
-        - RewritePath=/api/aggr/(?<suffix>.*), /$\{suffix}
-      - id: base-api
-        uri: ${SW_BACKEND_BASE_API_URI:https://sw-backend-admin-sa}
-        predicates:
-        - Path=/api/base/**
-        filters:
-        - RewritePath=/api/base/(?<suffix>.*), /$\{suffix}
-      - id: system-api
-        uri: ${SW_BACKEND_SYSTEM_API_URI:https://sw-backend-admin-sa}
-        predicates:
-        - Path=/api/system/**
-        filters:
-        - RewritePath=/api/system/(?<suffix>.*), /$\{suffix}
-      - id: biz-api
-        uri: ${SW_BACKEND_BIZ_API_URI:https://sw-backend-admin-sa}
-        predicates:
-        - Path=/api/biz/**
-        filters:
-        - RewritePath=/api/biz/(?<suffix>.*), /$\{suffix}
-
-
-##
-# infras.online-doc
+# online-doc
 #
 infras.online-doc.enabled: ${INFRAS_ONLINE_DOC_ENABLED:false}
 infras.online-doc.md-docs.staitc.path: ${INFRAS_ONLINE_DOC_MD_DOCS_STATIC_PATH:/doc/}
@@ -75,31 +41,34 @@
 
 
 ##
-# infras.security basic
+# server url for feign
 #
-infras.security.basic.enabled: ${INFRAS_SECURITY_BASIC_ENABLED:true}
+sw-backend-base-api: 
+  uri: ${SW_BACKEND_BASE_API_URI:https://sw-backend-admin-sa}
+  client-auth:
+    enabled: ${SW_BACKEND_BASE_API_CLIENT_AUTH_ENABLED:true}
+    key-password: ${SW_BACKEND_BASE_API_CLIENT_AUTH_KEY_PASSWORD:}
+    key-store: ${SW_BACKEND_BASE_API_CLIENT_AUTH_KEYSTORE_FILE:file:/certs/common/common.keystore}
+    key-store-password: ${SW_BACKEND_BASE_API_CLIENT_AUTH_KEYSTORE_PASSWORD:}
+    trust-store: ${SW_BACKEND_BASE_API_CLIENT_AUTH_TRUSTSTORE_FILE:file:/certs/common/common.truststore}
+    trust-store-password: ${SW_BACKEND_BASE_API_CLIENT_AUTH_TRUSTSTORE_PASSWORD:}
 
+sw-backend-system-api: 
+  uri: ${SW_BACKEND_SYSTEM_API_URI:https://sw-backend-admin-sa}
+  client-auth:
+    enabled: ${SW_BACKEND_SYSTEM_API_CLIENT_AUTH_ENABLED:true}
+    key-password: ${SW_BACKEND_SYSTEM_API_CLIENT_AUTH_KEY_PASSWORD:}
+    key-store: ${SW_BACKEND_SYSTEM_API_CLIENT_AUTH_KEYSTORE_FILE:file:/certs/common/common.keystore}
+    key-store-password: ${SW_BACKEND_SYSTEM_API_CLIENT_AUTH_KEYSTORE_PASSWORD:}
+    trust-store: ${SW_BACKEND_SYSTEM_API_CLIENT_AUTH_TRUSTSTORE_FILE:file:/certs/common/common.truststore}
+    trust-store-password: ${SW_BACKEND_SYSTEM_API_CLIENT_AUTH_TRUSTSTORE_PASSWORD:}
 
-##
-# infras.security jwt
-#
-infras.security.jwt.enabled: ${INFRAS_SECURITY_JWT_ENABLED:false}
-
-infras.security.jwt.public-key-pem: ${INFRAS_SECURITY_JWT_PUBLIC_KEY_PEM:}
-infras.security.jwt.private-key-pem-pkcs8: ${INFRAS_SECURITY_JWT_PRIVATE_KEY_PEM_PKCS8:}
-
-
-##
-# infras.security cas
-#
-infras.security.cas.enabled: ${INFRAS_SECURITY_CAS_ENABLED:false}
-
-#应用访问地址
-app.server.host.url: ${APP_SERVER_HOST_URL:https://localhost:8443}
-#应用登录地址
-app.login.url: ${APP_LOGIN_URL:/cas/login}
-#应用登出地址
-app.logout.url: ${APP_LOGOUT_URL:/cas/logout}
-
-#CAS服务地址
-cas.server.host.url: ${CAS_SERVER_HOST_URL:https://cas-server/cas}
+sw-backend-biz-api: 
+  uri: ${SW_BACKEND_BIZ_API_URI:https://sw-backend-admin-sa}
+  client-auth:
+    enabled: ${SW_BACKEND_BIZ_API_CLIENT_AUTH_ENABLED:true}
+    key-password: ${SW_BACKEND_BIZ_API_CLIENT_AUTH_KEY_PASSWORD:}
+    key-store: ${SW_BACKEND_BIZ_API_CLIENT_AUTH_KEYSTORE_FILE:file:/certs/common/common.keystore}
+    key-store-password: ${SW_BACKEND_BIZ_API_CLIENT_AUTH_KEYSTORE_PASSWORD:}
+    trust-store: ${SW_BACKEND_BIZ_API_CLIENT_AUTH_TRUSTSTORE_FILE:file:/certs/common/common.truststore}
+    trust-store-password: ${SW_BACKEND_BIZ_API_CLIENT_AUTH_TRUSTSTORE_PASSWORD:}
diff --git a/bff/admin/src/main/resources/application.yml b/bff/admin/src/main/resources/application.yml
index 5893a41..8ad7215 100644
--- a/bff/admin/src/main/resources/application.yml
+++ b/bff/admin/src/main/resources/application.yml
@@ -1,5 +1,7 @@
 server:
-  port: 8080
+  port: 8081
+  ssl:
+    enabled: false
 
 
 ##
@@ -13,84 +15,54 @@
 #    org.springframework.cloud.openfeign: INFO
 
 
+swagger2.apis.basePackage: com.supwisdom.institute
+
+
 spring:
   jackson:
     time-zone: Asia/Shanghai
 
-##
-# spring cloud gateway
-#
-  cloud:
-    gateway:
-      metrics:
-        enabled: true
-      routes:
-      - id: aggr-api
-        uri: http://localhost:8081
-        predicates:
-        - Path=/api/aggr/**
-        filters:
-        - RewritePath=/api/aggr/(?<suffix>.*), /$\{suffix}
-      - id: base-api
-        uri: http://localhost:8082
-        predicates:
-        - Path=/api/base/**
-        filters:
-        - RewritePath=/api/base/(?<suffix>.*), /$\{suffix}
-      - id: system-api
-        uri: http://localhost:8082
-        predicates:
-        - Path=/api/system/**
-        filters:
-        - RewritePath=/api/system/(?<suffix>.*), /$\{suffix}
-      - id: biz-api
-        uri: http://localhost:8082
-        predicates:
-        - Path=/api/biz/**
-        filters:
-        - RewritePath=/api/biz/(?<suffix>.*), /$\{suffix}
+
+feign:
+  client:
+    config:
+      default:
+        #errorDecoder: com.supwisdom.leaveschool.common.config.BaseExceptionErrorDecoder
+        connectTimeout: 12000
+        readTimeout: 12000
+        loggerLevel: full
+  hystrix:
+    enabled: true
+  httpclient:
+    enabled: true
+
+hystrix:
+  command:
+    default:
+      execution:
+        timeout:
+          enabled: true
+        isolation:
+          thread:
+            timeoutInMilliseconds: 12000
 
 
 ##
 # infras.online-doc
 #
-infras.online-doc.enabled: false
+infras.online-doc.enabled: true
 infras.online-doc.md-docs.staitc.path: /Users/loie/c/work/git/institute/sw-backend/doc/
 infras.online-doc.api-docs.staitc.path: /Users/loie/c/work/git/institute/sw-backend/api-docs/
 
 
 ##
-# infras.security basic
+# server url for feign
 #
-infras.security.basic.enabled: true
+sw-backend-base-api:
+  uri: http://localhost:8082
 
+sw-backend-system-api: 
+  uri: http://localhost:8082
 
-##
-# infras.security jwt
-#
-infras.security.jwt.enabled: false
-
-#infras.security.jwt.public-key-pem: |-
-#  -----BEGIN PUBLIC KEY-----
-#  MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBQw6TmvJ+nOuRaLoHsZJGIBzRg/wbskNv6UevL3/nQioYooptPfdIHVzPiKRVT5+DW5+nqzav3DOxY+HYKjO9nFjYdj0sgvRae6iVpa5Ji1wbDKOvwIDNukgnKbqvFXX2Isfl0RxeN3uEKdjeFGGFdr38I3ADCNKFNxtbmfqvjQIDAQAB
-#  -----END PUBLIC KEY-----
-#infras.security.jwt.private-key-pem-pkcs8: |-
-#  -----BEGIN PRIVATE KEY-----
-#  MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMFDDpOa8n6c65FougexkkYgHNGD/BuyQ2/pR68vf+dCKhiiim0990gdXM+IpFVPn4Nbn6erNq/cM7Fj4dgqM72cWNh2PSyC9Fp7qJWlrkmLXBsMo6/AgM26SCcpuq8VdfYix+XRHF43e4Qp2N4UYYV2vfwjcAMI0oU3G1uZ+q+NAgMBAAECgYA7jA7UuhxXmMAYmJ0hO7xnMQPQJouqeP3AYK9+sfMF7WQNHR/r0vj7Vli/dUm1I4hxr+x8fAuomf+ve6gds7sm+v2JHLzEIyPPiogoC7IcBmjJ3yVzW/26cXeOmTiPC/fW2g4BpYxSM8HLDaSkrtqzy8e9ijlzMpHBvvwLikufnQJBAOXaqIPuZ7Vm/JwQHAmX2HV+Qk6GMi/H7mL8X0AaW68w+Iccdbz1hzmMBfdn5NMmx2AOwoBAVivgjt0a1OfksHMCQQDXPtXxwFy4dQ4TbPu8L38P8s/bPo9ib1YkEMp57yBw+IvxB7jnpA9rUYTfZM/HpVP7r9rfVEUylVXXzhz1qx//AkEApWJOTBdW8bQ3YEdLFS/3pJqDNSLjq3OMuBZkpqgQfh6bRAQbRynW8XYpuNk9URye6iPUmRkxp4J86ORseqoWtwJAJb5a/b1hhObhxP5DVkht23oUgLmDoxsq28AmASOxaJ3szCMyhUv7eDIfPp0K4lNXWrcHhkncqHYPS3xVD68mOQJAV4SRDdWpgAbQOUODotohE48RxrabHo0l228CJ/pnm0q7gplPs4iSNJ2eijFuOMXfKkq3z/vxiNSA59FcdoCOHQ==
-#  -----END PRIVATE KEY-----
-
-
-##
-# infras.security cas
-#
-infras.security.cas.enabled: false
-
-#应用访问地址
-app.server.host.url: http://localhost:8080
-#应用登录地址
-app.login.url: /cas/login
-#应用登出地址
-app.logout.url: /cas/logout
-
-#CAS服务地址
-cas.server.host.url: https://cas.supwisdom.com/cas
+sw-backend-biz-api: 
+  uri: http://localhost:8082
diff --git a/bff/admin/src/main/resources/bootstrap.yml b/bff/admin/src/main/resources/bootstrap.yml
index 2df1be7..b2a926b 100644
--- a/bff/admin/src/main/resources/bootstrap.yml
+++ b/bff/admin/src/main/resources/bootstrap.yml
@@ -1,3 +1,3 @@
 spring:
   application:
-    name: sw-backend-admin-bff
+    name: sw-backend-admin-aggr
