1. 框架优化

2. 接口响应数据增加AES加密拦截
master
陈峰 1 year ago
parent 57490e76ab
commit 8fa20f37f1
  1. 19
      framework-core/pom.xml
  2. 50
      framework-core/src/main/java/com/unionmed/framework/crypto/AES.java
  3. 4
      framework-core/src/main/java/com/unionmed/framework/http/HttpHeaders.java
  4. 64
      framework-core/src/main/java/com/unionmed/framework/spring/mvc/ResponseBodyProcessor.java
  5. 8
      framework-core/src/main/java/com/unionmed/framework/spring/mvc/ResponseTemplate.java
  6. 20
      framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/ResponseBodyConfiguration.java
  7. 37
      framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/ResponseBodyProcessor.java
  8. 43
      framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/ResponseBodyProcessorChain.java
  9. 2
      framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/datatemplate/DataTemplate.java
  10. 42
      framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/datatemplate/DataTemplateResponseBodyInterceptor.java
  11. 2
      framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/datatemplate/DataTemplates.java
  12. 2
      framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/datatemplate/DoubleNestDataTemplate.java
  13. 4
      framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/datatemplate/SingleNestDataTemplate.java
  14. 88
      framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/interceptor/EncryptionResponseBodyInterceptor.java
  15. 27
      framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/interceptor/ResponseBodyInterceptor.java
  16. 23
      framework-core/src/main/java/com/unionmed/framework/util/Generators.java
  17. 2
      framework-orm/pom.xml
  18. 2
      framework-test/pom.xml
  19. 33
      pom.xml

@ -5,7 +5,7 @@
<parent> <parent>
<groupId>com.unionmed</groupId> <groupId>com.unionmed</groupId>
<artifactId>unionmed-framework</artifactId> <artifactId>unionmed-framework</artifactId>
<version>0.0.9</version> <version>0.0.11</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -46,11 +46,6 @@
<scope>runtime</scope> <scope>runtime</scope>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<!--<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>-->
<!-- minio 相关依赖 --> <!-- minio 相关依赖 -->
<dependency> <dependency>
@ -137,12 +132,6 @@
<artifactId>mksapi-jar</artifactId> <artifactId>mksapi-jar</artifactId>
</dependency> </dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-maven-plugin</artifactId>-->
<!-- <version>2.5.2</version>-->
<!-- </dependency>-->
<!-- Apache: http-client --> <!-- Apache: http-client -->
<dependency> <dependency>
<groupId>org.apache.httpcomponents</groupId> <groupId>org.apache.httpcomponents</groupId>
@ -166,6 +155,12 @@
<groupId>org.apache.httpcomponents</groupId> <groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId> <artifactId>httpmime</artifactId>
</dependency> </dependency>
<!-- 加/解 密 -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>

@ -0,0 +1,50 @@
package com.unionmed.framework.crypto;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
/**
* @author ianChen
* @date 2023/6/21 11:45
*/
@Slf4j
public class AES {
private static final String ALGORITHM = "AES";
private static final String PADDING = "AES/CBC/ISO10126Padding"; // AES/CBC/PKCS5PADDING
private static byte[] toUtf8Bytes(String s) throws UnsupportedEncodingException {
return s.getBytes("UTF-8");
}
public static String encrypt(String sk, String iv, String value) {
try {
IvParameterSpec ivSpec = new IvParameterSpec(toUtf8Bytes(iv));
SecretKeySpec skSpec = new SecretKeySpec(toUtf8Bytes(sk), ALGORITHM);
Cipher cipher = Cipher.getInstance(PADDING);
cipher.init(Cipher.ENCRYPT_MODE, skSpec, ivSpec);
return Base64.encodeBase64String(cipher.doFinal(value.getBytes()));
} catch (Exception ex) {
log.error("AES加密失败", ex);
return null;
}
}
public static String decrypt(String sk, String iv, String val) {
try {
IvParameterSpec ivSpec = new IvParameterSpec(toUtf8Bytes(iv));
SecretKeySpec skSpec = new SecretKeySpec(toUtf8Bytes(sk), ALGORITHM);
Cipher cipher = Cipher.getInstance(PADDING);
cipher.init(Cipher.DECRYPT_MODE, skSpec, ivSpec);
return new String(cipher.doFinal(Base64.decodeBase64(val)));
} catch (Exception ex) {
log.error("AES解密失败", ex);
return null;
}
}
}

@ -12,7 +12,11 @@ import java.util.Map;
*/ */
public class HttpHeaders { public class HttpHeaders {
// 数据模板
public static final String X_DATA_TEMPLATE = "X-Data-Template"; public static final String X_DATA_TEMPLATE = "X-Data-Template";
// response data 数据是否加密
public static final String X_DATA_CRYPT_E = "X-DATA-CRYPT-E";
public static final String X_DATA_CRYPT_E_VALUE_TRUE = "true";
public static final String CHARSET_UTF8 = "UTF-8"; public static final String CHARSET_UTF8 = "UTF-8";
public static final String APPLICATION_JSON_UTF8 = "application/json;charset=utf-8"; public static final String APPLICATION_JSON_UTF8 = "application/json;charset=utf-8";

@ -1,64 +0,0 @@
package com.unionmed.framework.spring.mvc;
import com.unionmed.framework.http.HttpHeaders;
import com.unionmed.framework.spring.mvc.annotation.ResponsePrototype;
import com.unionmed.framework.spring.mvc.datatemplate.DataTemplate;
import com.unionmed.framework.spring.mvc.datatemplate.DataTemplates;
import com.unionmed.framework.util.ObjectUtils;
import com.unionmed.framework.spring.mvc.BaseReturn;
import org.springframework.core.MethodParameter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.web.HttpMediaTypeNotAcceptableException;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.ModelAndViewContainer;
import org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor;
import java.io.IOException;
import java.util.List;
/**
* @author ianChen
* @date 2022/12/16 10:49
*/
public class ResponseBodyProcessor extends RequestResponseBodyMethodProcessor {
public ResponseBodyProcessor(List<HttpMessageConverter<?>> converters) {
super(converters);
}
private Object handleValue(Object returnValue, NativeWebRequest webRequest) {
String dataTemplateName = webRequest.getHeader(HttpHeaders.X_DATA_TEMPLATE);
if (ObjectUtils.isEmpty(dataTemplateName))
return returnValue;
DataTemplate dataTemplate = DataTemplates.get(dataTemplateName);
if (null == dataTemplate)
return returnValue;
return dataTemplate.handle(returnValue);
}
@Override
public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws IOException, HttpMediaTypeNotAcceptableException, HttpMessageNotWritableException {
if (!hasResponsePrototype(returnType)) {
if (returnValue == null) {
returnValue = BaseReturn.suc();
} else if (!(returnValue instanceof BaseReturn)) {
returnValue = BaseReturn.suc(returnValue);
}
returnValue = handleValue(returnValue, webRequest);
}
super.handleReturnValue(returnValue, returnType, mavContainer, webRequest);
}
private boolean hasResponsePrototype(MethodParameter returnType) {
return returnType.getAnnotatedElement().getAnnotation(ResponsePrototype.class) != null;
}
@Override
public boolean supportsReturnType(MethodParameter returnType) {
return returnType.getDeclaringClass().getName().startsWith("com.unionmed");
}
}

@ -1,8 +0,0 @@
package com.unionmed.framework.spring.mvc;
/**
* @author ianChen
* @date 2022/12/16 16:23
*/
public interface ResponseTemplate {
}

@ -1,10 +1,12 @@
package com.unionmed.framework.spring.mvc; package com.unionmed.framework.spring.mvc.response;
import com.unionmed.framework.spring.mvc.response.datatemplate.DataTemplateResponseBodyInterceptor;
import com.unionmed.framework.spring.mvc.response.interceptor.EncryptionResponseBodyInterceptor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler; import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor; import org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
@ -14,23 +16,29 @@ import java.util.List;
/** /**
* @author ianChen * @author ianChen
* @date 2022/12/16 10:47 * @date 2023/6/25 15:25
*/ */
@Configuration @Configuration
public class MvcConfig implements WebMvcConfigurer { public class ResponseBodyConfiguration {
@Autowired @Autowired
private Environment environment;
@Autowired
private RequestMappingHandlerAdapter requestMappingHandlerAdapter; private RequestMappingHandlerAdapter requestMappingHandlerAdapter;
@Bean // @Bean
public ResponseBodyProcessor responseBodyProcessor() { public ResponseBodyProcessor responseBodyProcessor() {
return new ResponseBodyProcessor(requestMappingHandlerAdapter.getMessageConverters());//初始化过滤器 ResponseBodyProcessorChain chain = new ResponseBodyProcessorChain();
chain.add(new DataTemplateResponseBodyInterceptor(), new EncryptionResponseBodyInterceptor(environment));
return new ResponseBodyProcessor(requestMappingHandlerAdapter.getMessageConverters(), chain);//初始化过滤器
} }
@PostConstruct @PostConstruct
public void regCustomReturnValueProcessor() { public void regCustomReturnValueProcessor() {
final List<HandlerMethodReturnValueHandler> handlers = new ArrayList<>(requestMappingHandlerAdapter.getReturnValueHandlers()); final List<HandlerMethodReturnValueHandler> handlers = new ArrayList<>(requestMappingHandlerAdapter.getReturnValueHandlers());
handlers.add(obtainValueHandlerPosition(handlers, HttpEntityMethodProcessor.class) - 1, responseBodyProcessor()); handlers.add(obtainValueHandlerPosition(handlers, HttpEntityMethodProcessor.class) - 1, responseBodyProcessor());
requestMappingHandlerAdapter.setReturnValueHandlers(handlers); requestMappingHandlerAdapter.setReturnValueHandlers(handlers);
} }

@ -0,0 +1,37 @@
package com.unionmed.framework.spring.mvc.response;
import org.springframework.core.MethodParameter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.web.HttpMediaTypeNotAcceptableException;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.ModelAndViewContainer;
import org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor;
import java.io.IOException;
import java.util.List;
/**
* @author ianChen
* @date 2022/12/16 10:49
*/
public class ResponseBodyProcessor extends RequestResponseBodyMethodProcessor {
private final ResponseBodyProcessorChain responseBodyProcessorChain;
public ResponseBodyProcessor(List<HttpMessageConverter<?>> converters, ResponseBodyProcessorChain responseBodyProcessorChain) {
super(converters);
this.responseBodyProcessorChain = responseBodyProcessorChain;
}
@Override
public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws IOException, HttpMediaTypeNotAcceptableException, HttpMessageNotWritableException {
returnValue = responseBodyProcessorChain.handler(returnValue, returnType, mavContainer, webRequest);
super.handleReturnValue(returnValue, returnType, mavContainer, webRequest);
}
@Override
public boolean supportsReturnType(MethodParameter returnType) {
return returnType.getDeclaringClass().getName().startsWith("com.unionmed");
}
}

@ -0,0 +1,43 @@
package com.unionmed.framework.spring.mvc.response;
import com.unionmed.framework.spring.mvc.response.interceptor.ResponseBodyInterceptor;
import com.unionmed.framework.util.ObjectUtils;
import org.springframework.core.MethodParameter;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.ModelAndViewContainer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* @author ianChen
* @date 2023/6/25 15:10
*/
public class ResponseBodyProcessorChain {
private List<ResponseBodyInterceptor> interceptors = new ArrayList<>(0);
public Object handler(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) {
if (ObjectUtils.notEmpty(interceptors)) {
for (ResponseBodyInterceptor interceptor : interceptors) {
returnValue = interceptor.handleReturnValue(returnValue, returnType, mavContainer, webRequest);
}
}
return returnValue;
}
public boolean add(ResponseBodyInterceptor... interceptors) {
if (ObjectUtils.isEmpty(interceptors)) return false;
for (ResponseBodyInterceptor interceptor : interceptors) {
if (interceptor != null) {
this.interceptors.add(interceptor);
}
}
Collections.sort(this.interceptors, Comparator.comparingInt(ResponseBodyInterceptor::getOrder));
return true;
}
}

@ -1,4 +1,4 @@
package com.unionmed.framework.spring.mvc.datatemplate; package com.unionmed.framework.spring.mvc.response.datatemplate;
/** /**
* @author ianChen * @author ianChen

@ -0,0 +1,42 @@
package com.unionmed.framework.spring.mvc.response.datatemplate;
import com.unionmed.framework.http.HttpHeaders;
import com.unionmed.framework.spring.mvc.BaseReturn;
import com.unionmed.framework.spring.mvc.annotation.ResponsePrototype;
import com.unionmed.framework.spring.mvc.response.interceptor.ResponseBodyInterceptor;
import com.unionmed.framework.util.ObjectUtils;
import org.springframework.core.MethodParameter;
import org.springframework.core.annotation.Order;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.ModelAndViewContainer;
/**
* @author ianChen
* @date 2023/6/25 10:29
*/
public class DataTemplateResponseBodyInterceptor implements ResponseBodyInterceptor {
@Override
public Object handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) {
if (returnType.getAnnotatedElement().getAnnotation(ResponsePrototype.class) != null)
return returnValue;
if (returnValue == null) {
returnValue = BaseReturn.suc();
} else if (!BaseReturn.class.isAssignableFrom(returnValue.getClass())) {
returnValue = BaseReturn.suc(returnValue);
}
String dataTemplate = webRequest.getHeader(HttpHeaders.X_DATA_TEMPLATE);
if (ObjectUtils.isEmpty(dataTemplate))
return returnValue;
DataTemplate template = DataTemplates.get(dataTemplate);
return null == template ? returnValue : template.handle(returnValue);
}
@Override
public int getOrder() {
return 9;
}
}

@ -1,4 +1,4 @@
package com.unionmed.framework.spring.mvc.datatemplate; package com.unionmed.framework.spring.mvc.response.datatemplate;
import com.unionmed.framework.bean.BeanFactory; import com.unionmed.framework.bean.BeanFactory;
import com.unionmed.framework.util.ObjectUtils; import com.unionmed.framework.util.ObjectUtils;

@ -1,4 +1,4 @@
package com.unionmed.framework.spring.mvc.datatemplate; package com.unionmed.framework.spring.mvc.response.datatemplate;
import com.unionmed.framework.spring.mvc.BaseReturn; import com.unionmed.framework.spring.mvc.BaseReturn;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;

@ -1,4 +1,4 @@
package com.unionmed.framework.spring.mvc.datatemplate; package com.unionmed.framework.spring.mvc.response.datatemplate;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.unionmed.framework.spring.mvc.BaseReturn; import com.unionmed.framework.spring.mvc.BaseReturn;
@ -23,7 +23,7 @@ public class SingleNestDataTemplate implements DataTemplate {
if (returnValue instanceof BaseReturn) { if (returnValue instanceof BaseReturn) {
Object data = ((BaseReturn) returnValue).getData(); Object data = ((BaseReturn) returnValue).getData();
if (data instanceof BaseReturn) { if (data instanceof BaseReturn) {
returnValue = ((BaseReturn) returnValue).getData(); return data;
} else if (data instanceof JSONObject && BaseReturnUtils.isBaseReturnFormat((JSONObject) data)) { } else if (data instanceof JSONObject && BaseReturnUtils.isBaseReturnFormat((JSONObject) data)) {
return data; return data;
} else { } else {

@ -0,0 +1,88 @@
package com.unionmed.framework.spring.mvc.response.interceptor;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.unionmed.framework.crypto.AES;
import com.unionmed.framework.http.HttpHeaders;
import com.unionmed.framework.spring.mvc.BaseReturn;
import com.unionmed.framework.spring.mvc.BaseReturnUtils;
import com.unionmed.framework.util.Generators;
import com.unionmed.framework.util.ObjectUtils;
import org.springframework.core.MethodParameter;
import org.springframework.core.env.Environment;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.ModelAndViewContainer;
import java.util.Map;
/**
* 加密拦截
*
* @author ianChen
* @date 2023/6/25 10:33
*/
public class EncryptionResponseBodyInterceptor implements ResponseBodyInterceptor {
private final Environment environment;
private final String RESOURCE_PREFIX = "unionmed.web.response.body.crypt.aes";
private final String SK_KEY = RESOURCE_PREFIX + ".sk";
private final String ENABLED_KEY = RESOURCE_PREFIX + ".enabled";
private final boolean enabled;
private final String sk;
public EncryptionResponseBodyInterceptor(Environment environment) {
this.environment = environment;
if (ObjectUtils.equalsIgnore(environment.getProperty(ENABLED_KEY), "true")) {
this.sk = environment.getProperty(SK_KEY);
if (ObjectUtils.isEmpty(sk))
throw new NullPointerException("AES SecretKey is empty");
this.enabled = true;
} else {
this.enabled = false;
this.sk = null;
}
}
@Override
public Object handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) {
if (!this.enabled || returnValue == null) return null;
String value = webRequest.getHeader(HttpHeaders.X_DATA_CRYPT_E);
if (ObjectUtils.equalsIgnore(value, HttpHeaders.X_DATA_CRYPT_E_VALUE_TRUE)) {
returnValue = handleReturnValue(sk, Generators.randomMix(16), returnValue);
}
return returnValue;
}
private Object handleReturnValue(String sk, String iv, Object returnValue) {
if (returnValue instanceof BaseReturn) {
BaseReturn br = (BaseReturn) returnValue;
if (br.getData() != null) {
br.setData(handleReturnValue(sk, iv, br.getData()));
return returnValue;
}
} else if (returnValue instanceof String) {
String str = (String) returnValue;
if (JSONUtil.isJsonObj(str)) {
return handleReturnValue(sk, iv, JSONObject.parseObject(str));
}
} else if (returnValue instanceof JSONObject) {
JSONObject jObject = (JSONObject) returnValue;
if (BaseReturnUtils.isBaseReturnFormat(jObject)) {
jObject.put("data", handleReturnValue(sk, iv, jObject.get("data")));
return jObject;
}
} else if (returnValue instanceof Map) {
return handleReturnValue(sk, iv, new JSONObject((Map<String, Object>) returnValue));
}
return iv + AES.encrypt(sk, iv, JSON.toJSONString(returnValue));
}
@Override
public int getOrder() {
return 8;
}
}

@ -0,0 +1,27 @@
package com.unionmed.framework.spring.mvc.response.interceptor;
import org.springframework.core.MethodParameter;
import org.springframework.core.Ordered;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.ModelAndViewContainer;
/**
* @author ianChen
* @date 2023/6/25 10:27
*/
public interface ResponseBodyInterceptor extends Ordered {
/**
* @param returnValue
* @param returnType
* @param mavContainer
* @param webRequest
* @return
*/
Object handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest);
@Override
default int getOrder() {
return 10;
}
}

@ -32,6 +32,29 @@ public final class Generators {
return sb.toString(); return sb.toString();
} }
public static String randomMix(int length) {
StringBuilder sb = new StringBuilder();
char a = 'a' - 10;
Random mix = new Random();
while (sb.length() < length) {
int n = Math.abs(new Random().nextInt()) % 36;
if (n < 10)
n += '0';
else
n += a;
if (n >= 97 && n <= 122) {
if (mix.nextInt(2) == 0) {
n -= 32;
}
}
sb.append((char) n);
}
return sb.toString();
}
/** /**
* 生成一个仅由数字字符组成的随机字符串 * 生成一个仅由数字字符组成的随机字符串
* *

@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>unionmed-framework</artifactId> <artifactId>unionmed-framework</artifactId>
<groupId>com.unionmed</groupId> <groupId>com.unionmed</groupId>
<version>0.0.9</version> <version>0.0.11</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent> <parent>
<groupId>com.unionmed</groupId> <groupId>com.unionmed</groupId>
<artifactId>unionmed-framework</artifactId> <artifactId>unionmed-framework</artifactId>
<version>0.0.9</version> <version>0.0.11</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

@ -9,7 +9,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.unionmed</groupId> <groupId>com.unionmed</groupId>
<artifactId>unionmed-framework</artifactId> <artifactId>unionmed-framework</artifactId>
<version>0.0.9</version> <version>0.0.11</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>unionmed-framework</name> <name>unionmed-framework</name>
@ -61,6 +61,7 @@
<log4j.version>1.2.12</log4j.version> <log4j.version>1.2.12</log4j.version>
<rxnetty.version>0.4.9</rxnetty.version> <rxnetty.version>0.4.9</rxnetty.version>
<mksapi.version>4.10.9049</mksapi.version> <mksapi.version>4.10.9049</mksapi.version>
<bcprov.version>1.73</bcprov.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
@ -111,12 +112,6 @@
<version>${ojdbc14.version}</version> <version>${ojdbc14.version}</version>
</dependency> </dependency>
<!--<dependency>-->
<!--<groupId>com.oracle</groupId>-->
<!--<artifactId>ojdbc14</artifactId>-->
<!--<version>10.2.0.4.0</version>-->
<!--</dependency>-->
<!-- minio 相关依赖 --> <!-- minio 相关依赖 -->
<dependency> <dependency>
<groupId>io.minio</groupId> <groupId>io.minio</groupId>
@ -176,12 +171,6 @@
<version>${swagger.knife4j.version}</version> <version>${swagger.knife4j.version}</version>
</dependency> </dependency>
<!-- <dependency>-->
<!-- <groupId>org.clojars.gukjoon</groupId>-->
<!-- <artifactId>ojdbc14</artifactId>-->
<!-- <version>1.4</version>-->
<!-- </dependency>-->
<dependency> <dependency>
<groupId>com.github.isrsal</groupId> <groupId>com.github.isrsal</groupId>
<artifactId>spring-mvc-logger</artifactId> <artifactId>spring-mvc-logger</artifactId>
@ -219,11 +208,6 @@
<artifactId>com.util</artifactId> <artifactId>com.util</artifactId>
<version>${com.util.version}</version> <version>${com.util.version}</version>
</dependency> </dependency>
<!--<dependency>
<groupId>com.unionmed3</groupId>
<artifactId>util4j</artifactId>
<version>1.0.0</version>
</dependency>-->
<dependency> <dependency>
<groupId>log4j</groupId> <groupId>log4j</groupId>
<artifactId>log4j</artifactId> <artifactId>log4j</artifactId>
@ -240,12 +224,6 @@
<version>${mksapi.version}</version> <version>${mksapi.version}</version>
</dependency> </dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-maven-plugin</artifactId>-->
<!-- <version>2.5.2</version>-->
<!-- </dependency>-->
<!-- Apache: http-client --> <!-- Apache: http-client -->
<dependency> <dependency>
<groupId>org.apache.httpcomponents</groupId> <groupId>org.apache.httpcomponents</groupId>
@ -273,6 +251,13 @@
<artifactId>httpmime</artifactId> <artifactId>httpmime</artifactId>
<version>${httpclient.version}</version> <version>${httpclient.version}</version>
</dependency> </dependency>
<!-- 加/解 密 -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
<version>${bcprov.version}</version>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
</project> </project>

Loading…
Cancel
Save