diff --git a/knife4j/knife4j-aggregation-spring-boot-starter/pom.xml b/knife4j/knife4j-aggregation-spring-boot-starter/pom.xml
index 31160dcde6d0d70750c2161d8f879ba00fb24dd9..eb912fe07450a47961e59dfb3685138943270db9 100644
--- a/knife4j/knife4j-aggregation-spring-boot-starter/pom.xml
+++ b/knife4j/knife4j-aggregation-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
knife4j
com.github.xiaoymin
- 2.0.8
+ 2.0.9
4.0.0
knife4j-aggregation-spring-boot-starter
diff --git a/knife4j/knife4j-aggregation-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/aggre/core/RouteDispatcher.java b/knife4j/knife4j-aggregation-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/aggre/core/RouteDispatcher.java
index 3940a845841e066bbdefda64a26b5609cb44daf6..19765b9dc5876ed50dd09c27a3b83a649ef3dbea 100644
--- a/knife4j/knife4j-aggregation-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/aggre/core/RouteDispatcher.java
+++ b/knife4j/knife4j-aggregation-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/aggre/core/RouteDispatcher.java
@@ -40,13 +40,13 @@ public class RouteDispatcher {
/**
* 请求头
*/
- public static final String ROUTE_PROXY_HEADER_NAME="knfie4j-gateway-request";
- public static final String ROUTE_PROXY_HEADER_BASIC_NAME="knife4j-gateway-basic-request";
- public static final String OPENAPI_GROUP_ENDPOINT="/swagger-resources";
- public static final String OPENAPI_GROUP_INSTANCE_ENDPOINT="/swagger-instance";
- public static final String ROUTE_BASE_PATH="/";
+ public static final String ROUTE_PROXY_HEADER_NAME = "knfie4j-gateway-request";
+ public static final String ROUTE_PROXY_HEADER_BASIC_NAME = "knife4j-gateway-basic-request";
+ public static final String OPENAPI_GROUP_ENDPOINT = "/swagger-resources";
+ public static final String OPENAPI_GROUP_INSTANCE_ENDPOINT = "/swagger-instance";
+ public static final String ROUTE_BASE_PATH = "/";
- Logger logger= LoggerFactory.getLogger(RouteDispatcher.class);
+ Logger logger = LoggerFactory.getLogger(RouteDispatcher.class);
/**
* 当前项目的contextPath
*/
@@ -58,73 +58,75 @@ public class RouteDispatcher {
private RouteCache routeCache;
- private Set ignoreHeaders=new HashSet<>();
+ private Set ignoreHeaders = new HashSet<>();
- public RouteDispatcher(RouteRepository routeRepository, RouteCache routeRouteCache, ExecutorEnum executorEnum,String rootPath){
- this.routeRepository=routeRepository;
- this.routeCache=routeRouteCache;
- this.rootPath=rootPath;
+ public RouteDispatcher(RouteRepository routeRepository, RouteCache routeRouteCache,
+ ExecutorEnum executorEnum, String rootPath) {
+ this.routeRepository = routeRepository;
+ this.routeCache = routeRouteCache;
+ this.rootPath = rootPath;
initExecutor(executorEnum);
ignoreHeaders.addAll(Arrays.asList(new String[]{
- "host","content-length",ROUTE_PROXY_HEADER_NAME,ROUTE_PROXY_HEADER_BASIC_NAME,"Request-Origion"
+ "host", "content-length", ROUTE_PROXY_HEADER_NAME, ROUTE_PROXY_HEADER_BASIC_NAME, "Request-Origion"
}));
}
- private void initExecutor(ExecutorEnum executorEnum){
- if (executorEnum==null){
+ private void initExecutor(ExecutorEnum executorEnum) {
+ if (executorEnum == null) {
throw new IllegalArgumentException("ExecutorEnum can not be empty");
}
- switch (executorEnum){
+ switch (executorEnum) {
case APACHE:
- this.routeExecutor=new ApacheClientExecutor();
+ this.routeExecutor = new ApacheClientExecutor();
break;
case OKHTTP:
- this.routeExecutor=new OkHttpClientExecutor();
+ this.routeExecutor = new OkHttpClientExecutor();
break;
default:
- throw new UnsupportedOperationException("UnSupported ExecutorType:"+executorEnum.name());
+ throw new UnsupportedOperationException("UnSupported ExecutorType:" + executorEnum.name());
}
}
- public boolean checkRoute(String header){
- if (StrUtil.isNotBlank(header)){
- SwaggerRoute swaggerRoute=routeCache.get(header);
- if (swaggerRoute!=null){
+ public boolean checkRoute(String header) {
+ if (StrUtil.isNotBlank(header)) {
+ SwaggerRoute swaggerRoute = routeCache.get(header);
+ if (swaggerRoute != null) {
return StrUtil.isNotBlank(swaggerRoute.getUri());
}
- swaggerRoute=routeRepository.getRoute(header);
- if (swaggerRoute!=null){
- routeCache.put(header,swaggerRoute);
+ swaggerRoute = routeRepository.getRoute(header);
+ if (swaggerRoute != null) {
+ routeCache.put(header, swaggerRoute);
return StrUtil.isNotBlank(swaggerRoute.getUri());
}
}
return false;
}
- public void execute(HttpServletRequest request, HttpServletResponse response){
- try{
- RouteRequestContext routeContext=new RouteRequestContext();
- this.buildContext(routeContext,request);
- RouteResponse routeResponse=routeExecutor.executor(routeContext);
- writeResponseHeader(routeResponse,response);
- writeBody(routeResponse,response);
- }catch (Exception e){
- logger.error("has Error:{}",e.getMessage());
- logger.error(e.getMessage(),e);
- //write Default
- writeDefault(request,response,e.getMessage());
+ public void execute(HttpServletRequest request, HttpServletResponse response) {
+ try {
+ RouteRequestContext routeContext = new RouteRequestContext();
+ this.buildContext(routeContext, request);
+ RouteResponse routeResponse = routeExecutor.executor(routeContext);
+ writeResponseStatus(routeResponse, response);
+ writeResponseHeader(routeResponse, response);
+ writeBody(routeResponse, response);
+ } catch (Exception e) {
+ logger.error("has Error:{}", e.getMessage());
+ logger.error(e.getMessage(), e);
+ //write Default
+ writeDefault(request, response, e.getMessage());
}
}
- protected void writeDefault(HttpServletRequest request,HttpServletResponse response,String errMsg){
+ protected void writeDefault(HttpServletRequest request, HttpServletResponse response, String errMsg) {
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
try {
- PrintWriter printWriter=response.getWriter();
- Map map= new HashMap<>();
- map.put("message",errMsg);
- map.put("code","500");
- map.put("path",request.getRequestURI());
+ PrintWriter printWriter = response.getWriter();
+ Map map = new HashMap<>();
+ map.put("message", errMsg);
+ map.put("code", "500");
+ map.put("path", request.getRequestURI());
new JSONObject(map).write(printWriter);
printWriter.close();
} catch (IOException e) {
@@ -132,25 +134,38 @@ public class RouteDispatcher {
}
}
+ /**
+ * Write 响应状态码
+ *
+ * @param routeResponse routeResponse
+ * @param response response
+ */
+ protected void writeResponseStatus(RouteResponse routeResponse, HttpServletResponse response) {
+ if (routeResponse != null) {
+ response.setStatus(routeResponse.getStatusCode());
+ }
+ }
+
/**
* Write响应头
+ *
* @param routeResponse
* @param response
*/
- protected void writeResponseHeader(RouteResponse routeResponse,HttpServletResponse response){
- if (routeResponse!=null){
- if (CollectionUtil.isNotEmpty(routeResponse.getHeaders())){
- for (HeaderWrapper header:routeResponse.getHeaders()){
- if (!StrUtil.equalsIgnoreCase(header.getName(),"Transfer-Encoding")){
- response.addHeader(header.getName(),header.getValue());
+ protected void writeResponseHeader(RouteResponse routeResponse, HttpServletResponse response) {
+ if (routeResponse != null) {
+ if (CollectionUtil.isNotEmpty(routeResponse.getHeaders())) {
+ for (HeaderWrapper header : routeResponse.getHeaders()) {
+ if (!StrUtil.equalsIgnoreCase(header.getName(), "Transfer-Encoding")) {
+ response.addHeader(header.getName(), header.getValue());
}
}
}
- if (logger.isDebugEnabled()){
- logger.debug("响应类型:{},响应编码:{}",routeResponse.getContentType(),routeResponse.getCharsetEncoding());
+ if (logger.isDebugEnabled()) {
+ logger.debug("响应类型:{},响应编码:{}", routeResponse.getContentType(), routeResponse.getCharsetEncoding());
}
response.setContentType(routeResponse.getContentType());
- if (routeResponse.getContentLength()>0){
+ if (routeResponse.getContentLength() > 0) {
response.setContentLengthLong(routeResponse.getContentLength());
}
response.setCharacterEncoding(routeResponse.getCharsetEncoding().displayName());
@@ -159,27 +174,28 @@ public class RouteDispatcher {
/**
* 响应内容
+ *
* @param routeResponse
* @param response
*/
- protected void writeBody(RouteResponse routeResponse,HttpServletResponse response) throws IOException {
- if (routeResponse!=null){
- if (routeResponse.success()){
- InputStream inputStream=routeResponse.getBody();
- if (inputStream!=null){
- int read=-1;
- byte[] bytes=new byte[1024*1024];
- ServletOutputStream outputStream=response.getOutputStream();
- while ((read=inputStream.read(bytes))!=-1){
- outputStream.write(bytes,0,read);
+ protected void writeBody(RouteResponse routeResponse, HttpServletResponse response) throws IOException {
+ if (routeResponse != null) {
+ if (routeResponse.success()) {
+ InputStream inputStream = routeResponse.getBody();
+ if (inputStream != null) {
+ int read = -1;
+ byte[] bytes = new byte[1024 * 1024];
+ ServletOutputStream outputStream = response.getOutputStream();
+ while ((read = inputStream.read(bytes)) != -1) {
+ outputStream.write(bytes, 0, read);
}
IoUtil.close(inputStream);
IoUtil.close(outputStream);
}
- }else{
- String text=routeResponse.text();
- if (StrUtil.isNotBlank(text)){
- PrintWriter printWriter=response.getWriter();
+ } else {
+ String text = routeResponse.text();
+ if (StrUtil.isNotBlank(text)) {
+ PrintWriter printWriter = response.getWriter();
printWriter.write(text);
printWriter.close();
}
@@ -190,80 +206,83 @@ public class RouteDispatcher {
/**
* 构建路由的请求上下文
+ *
* @param routeRequestContext
* @param request
*/
- protected void buildContext(RouteRequestContext routeRequestContext,HttpServletRequest request) throws IOException {
+ protected void buildContext(RouteRequestContext routeRequestContext, HttpServletRequest request) throws IOException {
//当前请求是否basic请求
- String basicHeader=request.getHeader(ROUTE_PROXY_HEADER_BASIC_NAME);
- if (StrUtil.isNotBlank(basicHeader)){
- BasicAuth basicAuth=routeRepository.getAuth(basicHeader);
- if (basicAuth!=null){
+ String basicHeader = request.getHeader(ROUTE_PROXY_HEADER_BASIC_NAME);
+ if (StrUtil.isNotBlank(basicHeader)) {
+ BasicAuth basicAuth = routeRepository.getAuth(basicHeader);
+ if (basicAuth != null) {
//增加Basic请求头
- routeRequestContext.addHeader("Authorization", RouteUtils.authorize(basicAuth.getUsername(),basicAuth.getPassword()));
+ routeRequestContext.addHeader("Authorization", RouteUtils.authorize(basicAuth.getUsername(),
+ basicAuth.getPassword()));
}
}
- SwaggerRoute swaggerRoute=getRoute(request.getHeader(ROUTE_PROXY_HEADER_NAME));
+ SwaggerRoute swaggerRoute = getRoute(request.getHeader(ROUTE_PROXY_HEADER_NAME));
//String uri="http://knife4j.xiaominfo.com";
- String uri=swaggerRoute.getUri();
- if (StrUtil.isBlank(uri)){
+ String uri = swaggerRoute.getUri();
+ if (StrUtil.isBlank(uri)) {
throw new RuntimeException("Uri is Empty");
}
- String host=URI.create(uri).getHost();
- String fromUri=request.getRequestURI();
- StringBuilder requestUrlBuilder=new StringBuilder();
+ String host = URI.create(uri).getHost();
+ String fromUri = request.getRequestURI();
+ StringBuilder requestUrlBuilder = new StringBuilder();
requestUrlBuilder.append(uri);
//判断当前聚合项目的contextPath
- if (StrUtil.isNotBlank(this.rootPath)&&!StrUtil.equals(this.rootPath,ROUTE_BASE_PATH)){
- fromUri=fromUri.replaceFirst(this.rootPath,"");
+ if (StrUtil.isNotBlank(this.rootPath) && !StrUtil.equals(this.rootPath, ROUTE_BASE_PATH)) {
+ fromUri = fromUri.replaceFirst(this.rootPath, "");
}
//判断servicePath
- if (StrUtil.isNotBlank(swaggerRoute.getServicePath())&&!StrUtil.equals(swaggerRoute.getServicePath(),ROUTE_BASE_PATH)){
- if (StrUtil.startWith(fromUri,swaggerRoute.getServicePath())){
+ if (StrUtil.isNotBlank(swaggerRoute.getServicePath()) && !StrUtil.equals(swaggerRoute.getServicePath(),
+ ROUTE_BASE_PATH)) {
+ if (StrUtil.startWith(fromUri, swaggerRoute.getServicePath())) {
//实际在请求时,剔除servicePath,否则会造成404
- fromUri=fromUri.replaceFirst(swaggerRoute.getServicePath(),"");
+ fromUri = fromUri.replaceFirst(swaggerRoute.getServicePath(), "");
}
}
requestUrlBuilder.append(fromUri);
//String requestUrl=uri+fromUri;
- String requestUrl=requestUrlBuilder.toString();
- if (logger.isDebugEnabled()){
- logger.debug("目标请求Url:{},请求类型:{},Host:{}",requestUrl,request.getMethod(),host);
+ String requestUrl = requestUrlBuilder.toString();
+ if (logger.isDebugEnabled()) {
+ logger.debug("目标请求Url:{},请求类型:{},Host:{}", requestUrl, request.getMethod(), host);
}
routeRequestContext.setOriginalUri(fromUri);
routeRequestContext.setUrl(requestUrl);
routeRequestContext.setMethod(request.getMethod());
- Enumeration enumeration=request.getHeaderNames();
- while (enumeration.hasMoreElements()){
- String key=enumeration.nextElement();
- String value=request.getHeader(key);
- if (!ignoreHeaders.contains(key.toLowerCase())){
- routeRequestContext.addHeader(key,value);
+ Enumeration enumeration = request.getHeaderNames();
+ while (enumeration.hasMoreElements()) {
+ String key = enumeration.nextElement();
+ String value = request.getHeader(key);
+ if (!ignoreHeaders.contains(key.toLowerCase())) {
+ routeRequestContext.addHeader(key, value);
}
}
- routeRequestContext.addHeader("Host",host);
- Enumeration params=request.getParameterNames();
- while (params.hasMoreElements()){
- String name=params.nextElement();
- String value=request.getParameter(name);
+ routeRequestContext.addHeader("Host", host);
+ Enumeration params = request.getParameterNames();
+ while (params.hasMoreElements()) {
+ String name = params.nextElement();
+ String value = request.getParameter(name);
//logger.info("param-name:{},value:{}",name,value);
- routeRequestContext.addParam(name,value);
+ routeRequestContext.addParam(name, value);
}
routeRequestContext.setRequestContent(request.getInputStream());
}
- public SwaggerRoute getRoute(String header){
- SwaggerRoute swaggerRoute=routeCache.get(header);
- if (swaggerRoute==null){
- swaggerRoute=routeRepository.getRoute(header);
- if (swaggerRoute!=null){
- routeCache.put(header,swaggerRoute);
+ public SwaggerRoute getRoute(String header) {
+ SwaggerRoute swaggerRoute = routeCache.get(header);
+ if (swaggerRoute == null) {
+ swaggerRoute = routeRepository.getRoute(header);
+ if (swaggerRoute != null) {
+ routeCache.put(header, swaggerRoute);
}
}
return swaggerRoute;
}
- public List getRoutes(){
+ public List getRoutes() {
return routeRepository.getRoutes();
}
}
diff --git a/knife4j/knife4j-annotations/pom.xml b/knife4j/knife4j-annotations/pom.xml
index 3d094b4a03ec3ff84c80fa3e274eb92b12270d8e..fa47920e8373e6901e037ae3289838742587fffb 100644
--- a/knife4j/knife4j-annotations/pom.xml
+++ b/knife4j/knife4j-annotations/pom.xml
@@ -5,7 +5,7 @@
knife4j
com.github.xiaoymin
- 2.0.8
+ 2.0.9
4.0.0
knife4j-annotations
diff --git a/knife4j/knife4j-core/pom.xml b/knife4j/knife4j-core/pom.xml
index a4ac84b1f376e7bbff7b2cf6db1c57b741159bda..b5b40e3b031a33d4355b0f360271be947a3a9991 100644
--- a/knife4j/knife4j-core/pom.xml
+++ b/knife4j/knife4j-core/pom.xml
@@ -5,7 +5,7 @@
knife4j
com.github.xiaoymin
- 2.0.8
+ 2.0.9
4.0.0
diff --git a/knife4j/knife4j-dependencies/pom.xml b/knife4j/knife4j-dependencies/pom.xml
index d695d22df5992011f8c20537508606a4ee250968..43f6be6dbbbc3ad4544af89f65320f33a978d4d2 100644
--- a/knife4j/knife4j-dependencies/pom.xml
+++ b/knife4j/knife4j-dependencies/pom.xml
@@ -6,7 +6,7 @@
4.0.0
com.github.xiaoymin
knife4j-dependencies
- 2.0.8
+ 2.0.9
pom
knife4j-dependencies
Knife4j Dependencies
@@ -35,7 +35,7 @@
1.8
- 2.0.8
+ 2.0.9
1.5.22
2.10.5
2.0.0.RELEASE
diff --git a/knife4j/knife4j-jfinal-ui/pom.xml b/knife4j/knife4j-jfinal-ui/pom.xml
index 7de1b446d4da0499f675e2993e779197f0e76708..0b3f99ecf3823d8f4246aea2aecc34894eb52397 100644
--- a/knife4j/knife4j-jfinal-ui/pom.xml
+++ b/knife4j/knife4j-jfinal-ui/pom.xml
@@ -5,7 +5,7 @@
knife4j
com.github.xiaoymin
- 2.0.8
+ 2.0.9
4.0.0
diff --git a/knife4j/knife4j-jfinal/pom.xml b/knife4j/knife4j-jfinal/pom.xml
index cf7fa601e561e9d63f175fbab70744d73ca2c057..1ba7d55778ffda6562b6f020d6857eccab49b70e 100644
--- a/knife4j/knife4j-jfinal/pom.xml
+++ b/knife4j/knife4j-jfinal/pom.xml
@@ -5,7 +5,7 @@
knife4j
com.github.xiaoymin
- 2.0.8
+ 2.0.9
4.0.0
diff --git a/knife4j/knife4j-micro-spring-boot-starter/pom.xml b/knife4j/knife4j-micro-spring-boot-starter/pom.xml
index ad9bc43a704cdb2f4d9e0667c378b2d1312277a2..d395175bcded97072d0cc0e8801759e22c3599cd 100644
--- a/knife4j/knife4j-micro-spring-boot-starter/pom.xml
+++ b/knife4j/knife4j-micro-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
knife4j
com.github.xiaoymin
- 2.0.8
+ 2.0.9
4.0.0
diff --git a/knife4j/knife4j-spring-boot-autoconfigure/pom.xml b/knife4j/knife4j-spring-boot-autoconfigure/pom.xml
index 75a28de06179e3965b1f33e55d200991ea1571f0..7849b68f8d704d941f64421b79339f9c27395f3c 100644
--- a/knife4j/knife4j-spring-boot-autoconfigure/pom.xml
+++ b/knife4j/knife4j-spring-boot-autoconfigure/pom.xml
@@ -5,7 +5,7 @@
knife4j
com.github.xiaoymin
- 2.0.8
+ 2.0.9
4.0.0
diff --git a/knife4j/knife4j-spring-boot-starter/pom.xml b/knife4j/knife4j-spring-boot-starter/pom.xml
index f8d561603436ece103faa8c4510a98e338187ae6..fe337567fb0729f954024038e8fea54432d441a1 100644
--- a/knife4j/knife4j-spring-boot-starter/pom.xml
+++ b/knife4j/knife4j-spring-boot-starter/pom.xml
@@ -5,7 +5,7 @@
knife4j
com.github.xiaoymin
- 2.0.8
+ 2.0.9
4.0.0
knife4j-spring-boot-starter
diff --git a/knife4j/knife4j-spring-mvc/pom.xml b/knife4j/knife4j-spring-mvc/pom.xml
index bf0a31215601525fcdce943803058ed0c9e5129b..ccb95af13d1da5769f63ca6ad890ccb8272d29da 100644
--- a/knife4j/knife4j-spring-mvc/pom.xml
+++ b/knife4j/knife4j-spring-mvc/pom.xml
@@ -5,7 +5,7 @@
knife4j
com.github.xiaoymin
- 2.0.8
+ 2.0.9
4.0.0
diff --git a/knife4j/knife4j-spring-ui/pom.xml b/knife4j/knife4j-spring-ui/pom.xml
index 5d073d42895e6e3e98d8f8a49340fe30b915629b..db9926b330cad853b5ced37c453c3b8a8517fc05 100644
--- a/knife4j/knife4j-spring-ui/pom.xml
+++ b/knife4j/knife4j-spring-ui/pom.xml
@@ -5,7 +5,7 @@
knife4j
com.github.xiaoymin
- 2.0.8
+ 2.0.9
4.0.0
knife4j-spring-ui
diff --git a/knife4j/knife4j-spring/pom.xml b/knife4j/knife4j-spring/pom.xml
index f98bdbc518d7150364c6dde11f169d23229f8986..fd7e13665908b5bc89744403c1a6c3aaba347368 100644
--- a/knife4j/knife4j-spring/pom.xml
+++ b/knife4j/knife4j-spring/pom.xml
@@ -5,7 +5,7 @@
knife4j
com.github.xiaoymin
- 2.0.8
+ 2.0.9
4.0.0
knife4j-spring
diff --git a/knife4j/knife4j-springdoc-ui/pom.xml b/knife4j/knife4j-springdoc-ui/pom.xml
index bcf9a628fd79e37b1035afc75b8e693400f14831..d931c3c674f03b3f3f2966e65e7f4101d9064c5f 100644
--- a/knife4j/knife4j-springdoc-ui/pom.xml
+++ b/knife4j/knife4j-springdoc-ui/pom.xml
@@ -5,7 +5,7 @@
knife4j
com.github.xiaoymin
- 2.0.8
+ 2.0.9
4.0.0
diff --git a/knife4j/pom.xml b/knife4j/pom.xml
index 82a112b4fef6ca9a935914fcec5bf0fc6aa33d09..966e5d04958a4afd9bdf7fa01c121979ce59267f 100644
--- a/knife4j/pom.xml
+++ b/knife4j/pom.xml
@@ -6,7 +6,7 @@
com.github.xiaoymin
knife4j
- 2.0.8
+ 2.0.9
knife4j-annotations
knife4j-spring
@@ -39,7 +39,7 @@
UTF-8
- 2.0.8
+ 2.0.9
1.8
5.2.2.RELEASE
2.10.5