diff --git a/PARAMS_RSA_DECRYPT_ENCRYPT.md b/PARAMS_RSA_DECRYPT_ENCRYPT.md
new file mode 100644
index 0000000..b2b8003
--- /dev/null
+++ b/PARAMS_RSA_DECRYPT_ENCRYPT.md
@@ -0,0 +1,114 @@
+# 加密解密功能介绍
+
+
+#### 客户端解密(服务器端加密出参data)
+
+>API返回值的data部分会用私钥加密
+>1.先使用公钥解密得到解密字符串
+>2.1返回data为Map类型:先转成Map,然后ASCII码排序得到->result1=xxxxx&result2=xxxxx,再MD5的到sign
+>2.2返回data为List类型:先转成List,然后JSON化,再MD5的到sign
+>2.3返回data为字符串或基础类型:先转成String,再MD5的到sign
+
+
+>客户端使用公钥解密
+
+正常api返回值
+```json
+{
+ "code": "S",
+ "data":"xxxxx",
+ "msg": [
+ "操作成功"
+ ]
+}
+```
+
+加密后api返回值
+```json
+{
+ "code": "S",
+ "data":"LZ6ylSuKj36Pd5_TGfHmmJUifKQq_BLLD_CRyw17Z6y9jfcjpK.....",
+ "sign":"dee2f5af75b50f99b16726784230afeb",
+ "msg": [
+ "请求成功"
+ ]
+}
+```
+
+解析代码
+```
+ //map
+ String mapData = "cEPfMp7-rim76XFdbNDSIzDRXyHySpz0VOZP6HC8U-JPl-ZxNZKp6ethEQWWITcuUPzIhp4fHiGKNsHA7F6OxCxibpMLj5-ZsgJJvcczw8Liens5kYgciRF1UziR3LFy6vybN9H1CJnqXaddbl3t_41P-_1l5Ev7YYa8woWp7ulaRPeTCDjohEpmx2Vi6aPSrm3hjjmitkD9gb0O6vFDNnclyNhFepKV3oh93tNv50sEQQ_QSBUXSHUtCnhTiBX8VsRX3h58F2tie7bG8VSk-6KFuXI07OiqFZSNpcwDOuq-GfMlEfPL3pX-gYhoOORPNClRlQHwyfHXBJly3gRtNVpVksHWQjr1xutWgYfwRjQPHBHNZwfx4E0XoCTuz9qH1CzFmmz68i63GzCM286zJ-J26MkiTDO1zH4jhglo38tnzz9HLeDcbbCuJg1jzkvpFiWamM-6odWhtCg65BS1tJJVWg023kWygZMu5Ebrm5WBbbatN87_K5zn211tFpKwRq2oVjO_AfJRY90WlQGEIHnzZNz_cf8mAjlmilHDuNdjYlj3axTUqLfgLDVaIkasREnjMI7oe8oAtG2ju2aq-xSAQZ_U-7-rsyBpoy0jnwRmlyUxhXgIX0zrfBQNXEjzPtg-iJ14R5qz1iOAJL7NtQQeuYngGTj6msDlKGEd_MQTLAFDbpiVPwWX00jLT1Ll3_zhivpPCUAmC8Yz58khkqrqi4FdIxJTDkxd0PFOBH8DYicF7ls4UdOHT24mAKDwUF_TfZ32oiiKSzCD9MJB8GEXjzx7tDFok-HsdOjI6ZnSUJCOTj3wne2E6_a8Gq2_vp5CWyW12wthJbH79aa7JVfy5cx-cZmNid7oCe54KYclz1tdUgLPCQ1ajsEevbRJ_NBkTmY2wAmUpHODeocDaYt_2AwAU2DLiv2uZuaVszNSUy593Zrzxq5AaY-oWbEeD24SyEWJObJtz5knYzr4NxjZShcjx9ezwiwkRZMtLZpA_cCPFAK1nOrN8zHCOZquS17CCSLDySLvGbxNqYeBa_lGSq8cQuQo8yybd1WkuLKUjUiJecmH2XcZNTPCtdRe0eLlRtk5928AQGsQugwSig";
+ String sign = StrUtil.toMD5(
+ StrUtil.getSignContent(
+ JsonUtil.json2Obj(mapData, Map.class)
+ )
+ )
+ //list
+ String listData = "Sf_FO8YC9EUNTeM0n9EVuDzwvLz3DcxOuG4-5UZ9486lLHAx7IOuAhPgVHpQGsQiqJ7Y3fTaWFr6rRFPL12rVg";
+ String sign = StrUtil.toMD5(
+ JsonUtil.obj2Json(
+ JsonUtil.json2Obj(listData, List.class)
+ )
+ )
+ //其他
+ String strData = "K9Zyg82WDvIApFmXTxPwjQw_VA041jfBcxMIP6jpMM6xWe1XajGf3__7DqSLrS9MwCra9cYkidcjVJAKZn9cmQ";
+ strData = RSA.publicDecrypt(strData, RSA.getPublicKey(properties.getPublicKey()));
+ String sign =StrUtil.toMD5(JsonUtil.json2Obj(strData, String.class);
+
+```
+
+
+#### 客户端加密 (服务器端解密入参data)
+
+>1.客户端先使用公钥加密,参数为Map类型
+>然后ASCII码排序得到新的参数->result1=xxxxx&result2=xxxxx,再MD5的到sign
+>加密新的参数得到data(也可以对原map JSON化后加密)
+>
+>2.API接收到json参数,解析为ParamsPO
+>ParamsPO.data部分进行解密操作,解密后得到原始参数(result1=xxxxx&result2=xxxxx)做MD5校验
+
+原始参数
+```
+Map map = new HashMap();
+map.put("page", 5);
+map.put("size", 16);
+map.put("content", "定制榻榻米垫竹编客厅茶几垫卧室地毯竹地毯飘窗垫日式榻榻米地毯");
+
+//对参数ASCII码排序
+String data = StrUtil.getSignContent(map);
+//封装请求参数
+ParamsPO params = new ParamsPO();
+params.setSign(StrUtil.toMD5(datas));
+params.setData(RSA.publicEncrypt(datas, RSA.getPublicKey(properties.getPublicKey())));
+```
+
+加密后的请求参数
+```json
+{
+ "data":"pe0V05nr5bfUp7c/JL1b/b6qJHipA5Qx8vM8BRryu3k=",
+ "sign":"dee2f5af75b50f99b16726784230afeb"
+}
+```
+
+
+### 配置
+1. 服务器配置私钥
+```
+yexuejc.http.encrypt.private-key=私钥
+yexuejc.http.encrypt.encrypt=true //加密:默认false
+yexuejc.http.encrypt.decrypt=true //解密:默认false
+```
+
+2.客户端请求
+```
+request:POST
+header:
+X-User-Agent:token
+Content-Type:application/json
+body:
+{
+"datas":"pe0V05nr5bfUp7c/JL1b/b6qJHipA5Qx8vM8BRryu3k=",
+"sign":"123456789"
+}
+```
\ No newline at end of file
diff --git a/README.md b/README.md
index 78a1c2a..d1d1e95 100644
--- a/README.md
+++ b/README.md
@@ -4,8 +4,8 @@
#### 项目介绍
基于springboot maven 封装可继承基础工程
-内含parent和base工程可分开使用
-parent:版本封装
+内含parent和base工程可分开使用
+parent:版本封装
base:功能封装
#### 引用
@@ -95,4 +95,7 @@ pom.xml
#### 版本更新
-[更新记录](UPDATE.md)
\ No newline at end of file
+[更新记录](UPDATE.md)
+
+[1.0.5新增 针对API请求安全解决方案](PARAMS_RSA_DECRYPT_ENCRYPT.md)
+[1.0.5新增 加密功能](PARAMS_RSA_DECRYPT_ENCRYPT.md)
\ No newline at end of file
diff --git a/UPDATE.md b/UPDATE.md
index 3e42d42..753c6ad 100644
--- a/UPDATE.md
+++ b/UPDATE.md
@@ -1,7 +1,16 @@
uselaw-base 更新内容
-------------------
-#### version :1.0.4
+#### version :1.0.5
+**time:** 2018-5-4 09:54:18
+**branch:** master
+**update:**
+> [使用加密解密](PARAMS_RSA_DECRYPT_ENCRYPT.md)
+>
+>1.增加json入参解密、出参加密
+#
+
+##### version :1.0.4
**time:** 2018-5-4 09:54:18
**branch:** master
**update:**
diff --git a/pom.xml b/pom.xml
index 218358f..a42afa9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
com.yexuejc.springboot
yexuejc-springboot-parent
- 1.0.4
+ 1.0.5
pom
${project.artifactId}
@@ -35,7 +35,7 @@
1.2.0
3.4.2
- 1.0.0
+ 1.1.0
0.7.0
1.1.46
1.10
diff --git a/yexuejc-springboot-base/pom.xml b/yexuejc-springboot-base/pom.xml
index 57e560a..b9d2f25 100644
--- a/yexuejc-springboot-base/pom.xml
+++ b/yexuejc-springboot-base/pom.xml
@@ -9,7 +9,7 @@
com.yexuejc.springboot
yexuejc-springboot-parent
- 1.0.4
+ 1.0.5
@@ -22,9 +22,13 @@
+
+
+
+
- com.github.yexuejc
- yexuejc-base
+ com.github.yexuejc
+ yexuejc-base
@@ -74,6 +78,14 @@
jedis
true
+
+
+ commons-io
+ commons-io
+ 2.6
+ true
+
+
org.springframework.boot
spring-boot-starter-test
diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/WebAutoConfiguration.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/WebAutoConfiguration.java
index a34f318..9d1146e 100644
--- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/WebAutoConfiguration.java
+++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/WebAutoConfiguration.java
@@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.yexuejc.base.http.Resps;
import com.yexuejc.base.util.DateUtil;
+import com.yexuejc.base.util.StrUtil;
import com.yexuejc.springboot.base.filter.ValidationFilter;
import com.yexuejc.springboot.base.filter.ValidationFilterProperties;
import com.yexuejc.springboot.base.interceptor.LogInterceptor;
@@ -19,14 +20,20 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+import java.nio.charset.Charset;
+import java.util.List;
+
/**
* WebMvc相关配置
*
@@ -45,6 +52,28 @@ public class WebAutoConfiguration extends WebMvcConfigurerAdapter {
this.properties = properties;
}
+ /******************************************编码部分*****************************************************/
+ @Bean
+ public HttpMessageConverter responseBodyConverter() {
+ StringHttpMessageConverter converter = new StringHttpMessageConverter(
+ Charset.forName("UTF-8"));
+ return converter;
+ }
+
+ @Override
+ public void configureMessageConverters(
+ List> converters) {
+ super.configureMessageConverters(converters);
+ converters.add(responseBodyConverter());
+ }
+
+ @Override
+ public void configureContentNegotiation(
+ ContentNegotiationConfigurer configurer) {
+ configurer.favorPathExtension(false);
+ }
+ /******************************************编码部分*****************************************************/
+
/**
* 添加拦截器
*/
@@ -108,7 +137,7 @@ public class WebAutoConfiguration extends WebMvcConfigurerAdapter {
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public Resps