refactor: 将 bff 的gateway 迁移到 gateway 项目下,将 aggr 重命名为 bff
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