From 974b38b932d945b9d7b3c7c3999b4f6b226a20ac Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 15 Apr 2021 10:22:44 +0800 Subject: [PATCH 01/12] api --- .../java/com/iformall/controller/UserBasicInfoController.java | 4 +++- .../com/iformall/service/impl/WxThirdPartyApiServiceImpl.java | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java b/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java index 09a892f4f..82a68e3bb 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java +++ b/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java @@ -55,7 +55,9 @@ public class UserBasicInfoController extends BaseController { String sign = SignUtils.getSign(signKey, paramMap, "MD5"); headMap.put("sign",sign); - HttpUtil.doPost("https://openapitest.malls.iformall.com/api/userInfo/register",headMap,paramMap); + String s = HttpUtil.doPost("https://openapitest.malls.iformall.com/api/api/userInfo/register", headMap, paramMap); + + System.out.println(s); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxThirdPartyApiServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxThirdPartyApiServiceImpl.java index 2e553e46d..a94114c0b 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxThirdPartyApiServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxThirdPartyApiServiceImpl.java @@ -23,6 +23,7 @@ public class WxThirdPartyApiServiceImpl implements WxThirdPartyApiService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired WxThirdPartyApiMapper wxThirdPartyApiMapper; @Autowired From 5cafe3fae1899ee4ad65914ee8c61f637862cb26 Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 15 Apr 2021 10:31:58 +0800 Subject: [PATCH 02/12] api --- .../src/main/java/com/iformall/domain/po/WxThirdPartyApi.java | 2 +- .../{WxThirdPartyConfigApi.xml => WxThirdPartyApiMapper.xml} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename mallinkService/src/main/resources/mapper/{WxThirdPartyConfigApi.xml => WxThirdPartyApiMapper.xml} (100%) diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxThirdPartyApi.java b/mallinkService/src/main/java/com/iformall/domain/po/WxThirdPartyApi.java index bf4d81939..e7ee75278 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxThirdPartyApi.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxThirdPartyApi.java @@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode; import java.util.Date; -@TableName(value = "wx_third_party_Api") +@TableName(value = "wx_third_party_api") @Data @EqualsAndHashCode(callSuper = true) public class WxThirdPartyApi extends TenantEntity { diff --git a/mallinkService/src/main/resources/mapper/WxThirdPartyConfigApi.xml b/mallinkService/src/main/resources/mapper/WxThirdPartyApiMapper.xml similarity index 100% rename from mallinkService/src/main/resources/mapper/WxThirdPartyConfigApi.xml rename to mallinkService/src/main/resources/mapper/WxThirdPartyApiMapper.xml From 836422192ade1923cddc403bcbc247f10084e127 Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 15 Apr 2021 16:05:32 +0800 Subject: [PATCH 03/12] api --- .../controller/UserBasicInfoController.java | 9 ++- .../interceptor/AuthorizationInterceptor.java | 81 ++++++++++++++----- 2 files changed, 65 insertions(+), 25 deletions(-) diff --git a/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java b/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java index 82a68e3bb..2dc708923 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java +++ b/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java @@ -29,7 +29,7 @@ public class UserBasicInfoController extends BaseController { */ @PostMapping("/register") @ApiOperation(value = "用户注册", notes = "") - public ResultData userRegister(@RequestParam Map map) { + public ResultData userRegister(@RequestBody Map map) { logger.info("UserBasicInfoController >>>>>>>> userRegister >>>>>>>>>>>>>>>>>"+map.toString()); String phone = map.get("phone"); logger.info("UserBasicInfoController >>>>>>>> userRegister >>>>>>>>>>>>>>>>>phone="+phone); @@ -44,15 +44,18 @@ public class UserBasicInfoController extends BaseController { String signKey = "C61842C8570524AA81756C53B8096978A06AE00D"; Map headMap = new HashMap<>(); - headMap.put("cookie",appId+"&"+appKey); + headMap.put("appkey",appId+"&"+appKey); Map paramMap = new HashMap<>(); - paramMap.put("timeStamp",Long.toString(new Date().getTime()));//当前时间戳 + String timeStamp = Long.toString(new Date().getTime()); + System.out.println("timeStamp="+timeStamp); + paramMap.put("timeStamp",timeStamp);//当前时间戳 paramMap.put("phone","17600293031"); paramMap.put("userName","昵称"); paramMap.put("userSex","1"); String sign = SignUtils.getSign(signKey, paramMap, "MD5"); + System.out.println("sign="+sign); headMap.put("sign",sign); String s = HttpUtil.doPost("https://openapitest.malls.iformall.com/api/api/userInfo/register", headMap, paramMap); diff --git a/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java b/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java index 92f218ac7..498975c01 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java +++ b/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java @@ -1,6 +1,7 @@ package com.iformall.interceptor; +import com.alibaba.fastjson.JSON; import com.iformall.common.ErrorCode; import com.iformall.domain.po.WxThirdPartyApi; import com.iformall.exception.MallinkException; @@ -18,8 +19,12 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; +import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; import java.util.*; /** @@ -43,7 +48,7 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - String cookie = request.getHeader("cookie"); + String cookie = request.getHeader("appkey"); if (StringUtils.isBlank(cookie) || !cookie.contains("&")) { throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"非法请求"); } @@ -60,7 +65,16 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"缺少加密串"); } - String timeStamp = request.getParameter("timeStamp"); + String body = ((BodyReaderHttpServletRequestWrapper) request).getBody(); + if(StringUtils.isBlank(body)){ + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"缺少参数"); + } + Map param = StringToMap(body); + if(param.isEmpty()){ + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"参数格式不正确"); + } + + String timeStamp = param.get("timeStamp"); long timestampDate = Long.valueOf(timeStamp) + 1000*60*5;//五分钟有效 long currDate = System.currentTimeMillis(); // 请求过期 @@ -68,7 +82,7 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请求过期"); } -// String nonceStr = request.getParameter("nonceStr"); +// String nonceStr = param.get("nonceStr"); // //重复调用 // Integer cache = RedisCacheUtils.getCacheInteger(redisTemplate, Constant.publicApiNonce+nonceStr); // if (null != cache) { @@ -77,28 +91,29 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { - Enumeration paramNames = request.getParameterNames(); - Map map = new HashMap(); - - //获取所有的请求参数 - while (paramNames.hasMoreElements()) { - String paramName = paramNames.nextElement(); - String[] paramValues = request.getParameterValues(paramName); +// Enumeration paramNames = request.getParameterNames(); +// Map map = new HashMap(); +// +// //获取所有的请求参数 +// while (paramNames.hasMoreElements()) { +// String paramName = paramNames.nextElement(); +// String[] paramValues = request.getParameterValues(paramName); +// +// if (paramValues.length > 0) { +// String paramValue = paramValues[0]; +// if (paramValue.length() != 0 +// && !"sign".equals(paramName) +// && !"appId".equals(paramName) +// && !"appKey".equals(paramName) +// && !"signKey".equals(paramName)) { +// map.put(paramName, paramValue); +// } +// } +// } - if (paramValues.length > 0) { - String paramValue = paramValues[0]; - if (paramValue.length() != 0 - && !"sign".equals(paramName) - && !"appId".equals(paramName) - && !"appKey".equals(paramName) - && !"signKey".equals(paramName)) { - map.put(paramName, paramValue); - } - } - } logger.info("sign={}"+signature); String signKey = apiConfig.getSignKey();//TODO 根据appId查询密钥,缓存 - String newSignature = SignUtils.getSign(signKey, map, "MD5"); + String newSignature = SignUtils.getSign(signKey, param, "MD5"); //加密串不匹配 if (!signature.equals(newSignature)) { throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"加密串校验失败"); @@ -111,4 +126,26 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { return true; } + + private Map StringToMap(String body){ + Map map = new HashMap(); + String[] keyValues = body.split("&"); + for (String kv:keyValues) { + if(StringUtils.isBlank(kv) || !kv.contains("=")){ + continue; + } + String[] key_value = kv.split("="); + String key = key_value[0]; + if(StringUtils.isNotBlank(key) + && !"sign".equals(key) + && !"appId".equals(key) + && !"appKey".equals(key) + && !"signKey".equals(key)){ + String value = kv.substring(kv.indexOf('=') + 1, kv.length()); + map.put(key_value[0],value); + } + } + return map; + } + } From ec6392bc53a9428f614485bc5d878a9d6eb8745a Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 15 Apr 2021 17:18:17 +0800 Subject: [PATCH 04/12] api --- .../java/com/iformall/config/WebMvcConfig.java | 15 +++++++++++++++ .../interceptor/AuthorizationInterceptor.java | 6 +++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/mallinkPublicApi/src/main/java/com/iformall/config/WebMvcConfig.java b/mallinkPublicApi/src/main/java/com/iformall/config/WebMvcConfig.java index 1b2a21515..eaa822bff 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/config/WebMvcConfig.java +++ b/mallinkPublicApi/src/main/java/com/iformall/config/WebMvcConfig.java @@ -15,9 +15,11 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.filter.CharacterEncodingFilter; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.*; +import javax.servlet.Filter; import java.math.BigDecimal; import java.math.BigInteger; import java.text.SimpleDateFormat; @@ -63,6 +65,19 @@ public class WebMvcConfig implements WebMvcConfigurer { .maxAge(3600); } + /** + * 用于处理编码问题 + * + * @return + */ + @Bean("myCharacterEncodingFilter") + public Filter characterEncodingFilter() { + CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); + characterEncodingFilter.setEncoding("UTF-8"); + characterEncodingFilter.setForceEncoding(true); + return characterEncodingFilter; + } + @Override public void configureMessageConverters(List> converters) { MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); diff --git a/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java b/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java index 498975c01..92a55106d 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java +++ b/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java @@ -48,11 +48,11 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - String cookie = request.getHeader("appkey"); - if (StringUtils.isBlank(cookie) || !cookie.contains("&")) { + String appkey = request.getHeader("appkey"); + if (StringUtils.isBlank(appkey) || !appkey.contains("&")) { throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"非法请求"); } - String[] split = cookie.split("&"); + String[] split = appkey.split("&"); WxThirdPartyApi apiConfig = wxThirdPartyApiService.findByApp(split[0], split[1]); if(apiConfig == null){ throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"非法请求"); From b85ab2938637f2675bc9c037d89e0a8cca7a33a9 Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 15 Apr 2021 17:26:44 +0800 Subject: [PATCH 05/12] api --- .../interceptor/HttpServletRequestWrapperFilter.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mallinkPublicApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java b/mallinkPublicApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java index ec4e7cb7d..d6a60de9f 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java +++ b/mallinkPublicApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java @@ -6,6 +6,7 @@ import org.slf4j.LoggerFactory; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class HttpServletRequestWrapperFilter implements Filter { @@ -24,9 +25,15 @@ public class HttpServletRequestWrapperFilter implements Filter { long start = System.currentTimeMillis(); ServletRequest requestWrapper = null; - /* // 跨域访问 HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; + + req.setCharacterEncoding("UTF-8"); + res.setCharacterEncoding("UTF-8"); + + + /* // 跨域访问 + String originHeader = req.getHeader("Origin"); if (Arrays.asList(ALLOW_DOMAIN).contains(originHeader)) { From 74e41147b72fc1e9202cbf39c985002589566f21 Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 15 Apr 2021 17:45:07 +0800 Subject: [PATCH 06/12] api --- mallinkPublicApi/src/main/resources/application.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mallinkPublicApi/src/main/resources/application.yml b/mallinkPublicApi/src/main/resources/application.yml index 26270095d..a4bbf3cc2 100644 --- a/mallinkPublicApi/src/main/resources/application.yml +++ b/mallinkPublicApi/src/main/resources/application.yml @@ -12,6 +12,11 @@ spring: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 default-property-inclusion: non_null + http: + encoding: + force: true + charset: UTF-8 + enabled: true # rocketmq: # nameServer: 127.0.0.1:9876 # producer: From f9f2703779536f3668869eb161e64c51d36268d6 Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 15 Apr 2021 18:12:44 +0800 Subject: [PATCH 07/12] api --- .../main/java/com/iformall/config/WebMvcConfig.java | 13 ------------- .../interceptor/AuthorizationInterceptor.java | 10 ++++++++++ .../HttpServletRequestWrapperFilter.java | 8 +------- mallinkPublicApi/src/main/resources/application.yml | 5 ----- 4 files changed, 11 insertions(+), 25 deletions(-) diff --git a/mallinkPublicApi/src/main/java/com/iformall/config/WebMvcConfig.java b/mallinkPublicApi/src/main/java/com/iformall/config/WebMvcConfig.java index eaa822bff..de640f6e5 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/config/WebMvcConfig.java +++ b/mallinkPublicApi/src/main/java/com/iformall/config/WebMvcConfig.java @@ -65,19 +65,6 @@ public class WebMvcConfig implements WebMvcConfigurer { .maxAge(3600); } - /** - * 用于处理编码问题 - * - * @return - */ - @Bean("myCharacterEncodingFilter") - public Filter characterEncodingFilter() { - CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); - characterEncodingFilter.setEncoding("UTF-8"); - characterEncodingFilter.setForceEncoding(true); - return characterEncodingFilter; - } - @Override public void configureMessageConverters(List> converters) { MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); diff --git a/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java b/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java index 92a55106d..4c8a95f28 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java +++ b/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java @@ -25,6 +25,9 @@ import javax.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; import java.util.*; /** @@ -129,6 +132,13 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { private Map StringToMap(String body){ Map map = new HashMap(); + try { + URLDecoder.decode(body, "utf-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + return map; + } + String[] keyValues = body.split("&"); for (String kv:keyValues) { if(StringUtils.isBlank(kv) || !kv.contains("=")){ diff --git a/mallinkPublicApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java b/mallinkPublicApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java index d6a60de9f..19be5e6a7 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java +++ b/mallinkPublicApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java @@ -25,15 +25,9 @@ public class HttpServletRequestWrapperFilter implements Filter { long start = System.currentTimeMillis(); ServletRequest requestWrapper = null; + /* // 跨域访问 HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; - - req.setCharacterEncoding("UTF-8"); - res.setCharacterEncoding("UTF-8"); - - - /* // 跨域访问 - String originHeader = req.getHeader("Origin"); if (Arrays.asList(ALLOW_DOMAIN).contains(originHeader)) { diff --git a/mallinkPublicApi/src/main/resources/application.yml b/mallinkPublicApi/src/main/resources/application.yml index a4bbf3cc2..26270095d 100644 --- a/mallinkPublicApi/src/main/resources/application.yml +++ b/mallinkPublicApi/src/main/resources/application.yml @@ -12,11 +12,6 @@ spring: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 default-property-inclusion: non_null - http: - encoding: - force: true - charset: UTF-8 - enabled: true # rocketmq: # nameServer: 127.0.0.1:9876 # producer: From 7de265e8a56606d4387ac86f3abed041fdaf9f13 Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 15 Apr 2021 18:21:38 +0800 Subject: [PATCH 08/12] api --- .../com/iformall/interceptor/AuthorizationInterceptor.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java b/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java index 4c8a95f28..c33c2e77d 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java +++ b/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java @@ -132,14 +132,15 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { private Map StringToMap(String body){ Map map = new HashMap(); + String bodyDecode = ""; try { - URLDecoder.decode(body, "utf-8"); + bodyDecode = URLDecoder.decode(body, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return map; } - String[] keyValues = body.split("&"); + String[] keyValues = bodyDecode.split("&"); for (String kv:keyValues) { if(StringUtils.isBlank(kv) || !kv.contains("=")){ continue; From a196546b1acf9d23a8be0c9b73868d4e3f6e19d2 Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 15 Apr 2021 18:29:20 +0800 Subject: [PATCH 09/12] api --- .../java/com/iformall/controller/UserBasicInfoController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java b/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java index 2dc708923..4f4a579b4 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java +++ b/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java @@ -29,7 +29,7 @@ public class UserBasicInfoController extends BaseController { */ @PostMapping("/register") @ApiOperation(value = "用户注册", notes = "") - public ResultData userRegister(@RequestBody Map map) { + public ResultData userRegister(@RequestParam Map map) { logger.info("UserBasicInfoController >>>>>>>> userRegister >>>>>>>>>>>>>>>>>"+map.toString()); String phone = map.get("phone"); logger.info("UserBasicInfoController >>>>>>>> userRegister >>>>>>>>>>>>>>>>>phone="+phone); From 19bfd870a4768e9e07be8f58491b6e9b4332b136 Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 15 Apr 2021 18:50:57 +0800 Subject: [PATCH 10/12] api --- .../com/iformall/controller/UserBasicInfoController.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java b/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java index 4f4a579b4..ccf25a923 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java +++ b/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java @@ -24,15 +24,14 @@ public class UserBasicInfoController extends BaseController { /** * 用户注册 * - * @param map + * @param * @return */ @PostMapping("/register") @ApiOperation(value = "用户注册", notes = "") - public ResultData userRegister(@RequestParam Map map) { - logger.info("UserBasicInfoController >>>>>>>> userRegister >>>>>>>>>>>>>>>>>"+map.toString()); - String phone = map.get("phone"); - logger.info("UserBasicInfoController >>>>>>>> userRegister >>>>>>>>>>>>>>>>>phone="+phone); + public ResultData userRegister(@RequestParam String userName,@RequestParam String phone) { + logger.info("UserBasicInfoController >>>>>>>> userName >>>>>>>>>>>>>>>>>"+userName); + logger.info("UserBasicInfoController >>>>>>>> phone >>>>>>>>>>>>>>>>>"+phone); return new ResultData(); } From dba7c67b4343c56885714f3875edbceba7bab883 Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 15 Apr 2021 19:05:31 +0800 Subject: [PATCH 11/12] api --- .../com/iformall/controller/UserBasicInfoController.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java b/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java index ccf25a923..bb782700a 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java +++ b/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java @@ -5,8 +5,10 @@ import com.iformall.utils.HttpUtil; import com.iformall.utils.sign.SignUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -29,9 +31,9 @@ public class UserBasicInfoController extends BaseController { */ @PostMapping("/register") @ApiOperation(value = "用户注册", notes = "") - public ResultData userRegister(@RequestParam String userName,@RequestParam String phone) { - logger.info("UserBasicInfoController >>>>>>>> userName >>>>>>>>>>>>>>>>>"+userName); - logger.info("UserBasicInfoController >>>>>>>> phone >>>>>>>>>>>>>>>>>"+phone); + public ResultData userRegister(@RequestBody MultiValueMap map) { + logger.info("UserBasicInfoController >>>>>>>>>>>>>>>>>>>>>>>>>"+map.toString()); +// logger.info("UserBasicInfoController >>>>>>>>phone >>>>>>>>>>>>>>>>>"+phone); return new ResultData(); } From 2063d7b89f55f232d735662c84d4465f91cd51a6 Mon Sep 17 00:00:00 2001 From: xhxu Date: Fri, 16 Apr 2021 13:51:18 +0800 Subject: [PATCH 12/12] api --- .../controller/UserBasicInfoController.java | 8 +- .../interceptor/AuthorizationInterceptor.java | 137 +++++++++++------- .../BodyReaderHttpServletRequestWrapper.java | 25 +++- .../java/com/iformall/utils/HttpUtil.java | 59 ++++++++ 4 files changed, 174 insertions(+), 55 deletions(-) diff --git a/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java b/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java index bb782700a..f1c7c5221 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java +++ b/mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java @@ -1,5 +1,6 @@ package com.iformall.controller; +import com.alibaba.fastjson.JSON; import com.iformall.common.ResultData; import com.iformall.utils.HttpUtil; import com.iformall.utils.sign.SignUtils; @@ -8,7 +9,6 @@ import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -16,7 +16,7 @@ import java.util.HashMap; import java.util.Map; @RestController -@RequestMapping("/api/userInfo") +@RequestMapping("api/userInfo") @Api(description = "会员相关接口") public class UserBasicInfoController extends BaseController { @@ -31,7 +31,7 @@ public class UserBasicInfoController extends BaseController { */ @PostMapping("/register") @ApiOperation(value = "用户注册", notes = "") - public ResultData userRegister(@RequestBody MultiValueMap map) { + public ResultData userRegister(@RequestBody Map map) { logger.info("UserBasicInfoController >>>>>>>>>>>>>>>>>>>>>>>>>"+map.toString()); // logger.info("UserBasicInfoController >>>>>>>>phone >>>>>>>>>>>>>>>>>"+phone); @@ -59,7 +59,7 @@ public class UserBasicInfoController extends BaseController { System.out.println("sign="+sign); headMap.put("sign",sign); - String s = HttpUtil.doPost("https://openapitest.malls.iformall.com/api/api/userInfo/register", headMap, paramMap); + String s = HttpUtil.doPost("https://openapitest.malls.iformall.com/api/api/userInfo/register", headMap, JSON.toJSONString(paramMap)); System.out.println(s); diff --git a/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java b/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java index c33c2e77d..386ad8dc3 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java +++ b/mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java @@ -2,6 +2,8 @@ package com.iformall.interceptor; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; import com.iformall.common.ErrorCode; import com.iformall.domain.po.WxThirdPartyApi; import com.iformall.exception.MallinkException; @@ -51,6 +53,8 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + response.setHeader("Content-type", "application/json;charset=UTF-8"); + String appkey = request.getHeader("appkey"); if (StringUtils.isBlank(appkey) || !appkey.contains("&")) { throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"非法请求"); @@ -68,22 +72,55 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"缺少加密串"); } + + String body = ((BodyReaderHttpServletRequestWrapper) request).getBody(); if(StringUtils.isBlank(body)){ throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"缺少参数"); } - Map param = StringToMap(body); - if(param.isEmpty()){ + try{ +// JSONObject parameterMap = JSON.parseObject(body); + Map parameterMap = JSONObject.parseObject(body, new TypeReference>() { + }); + + String timeStamp = parameterMap.get("timeStamp"); + long timestampDate = Long.valueOf(timeStamp) + 1000*60*5;//五分钟有效 + long currDate = System.currentTimeMillis(); + // 请求过期 + if (timestampDate < currDate) { + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请求过期"); + } + + logger.info("sign={}"+signature); + String signKey = apiConfig.getSignKey();//TODO 根据appId查询密钥,缓存 + String newSignature = SignUtils.getSign(signKey, parameterMap, "MD5"); + //加密串不匹配 + if (!signature.equals(newSignature)) { + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"加密串校验失败"); + } + Integer cache = RedisCacheUtils.getCacheInteger(redisTemplate, Constant.publicApiNonce+signature); + if (null != cache) { + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"重复调用"); + } + RedisCacheUtils.cache(redisTemplate, Constant.publicApiNonce+signature, 1, 300); + return true; + + }catch(Exception e){ throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"参数格式不正确"); } - String timeStamp = param.get("timeStamp"); - long timestampDate = Long.valueOf(timeStamp) + 1000*60*5;//五分钟有效 - long currDate = System.currentTimeMillis(); - // 请求过期 - if (timestampDate < currDate) { - throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请求过期"); - } +// Map param = StringToMap(body); +// if(param.isEmpty()){ +// throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"参数格式不正确"); +// } +// +// String timeStamp = param.get("timeStamp"); +// long timestampDate = Long.valueOf(timeStamp) + 1000*60*5;//五分钟有效 +// long currDate = System.currentTimeMillis(); +// // 请求过期 +// if (timestampDate < currDate) { +// throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"请求过期"); +// } // String nonceStr = param.get("nonceStr"); // //重复调用 @@ -114,49 +151,49 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { // } // } - logger.info("sign={}"+signature); - String signKey = apiConfig.getSignKey();//TODO 根据appId查询密钥,缓存 - String newSignature = SignUtils.getSign(signKey, param, "MD5"); - //加密串不匹配 - if (!signature.equals(newSignature)) { - throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"加密串校验失败"); - } - Integer cache = RedisCacheUtils.getCacheInteger(redisTemplate, Constant.publicApiNonce+signature); - if (null != cache) { - throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"重复调用"); - } - RedisCacheUtils.cache(redisTemplate, Constant.publicApiNonce+signature, 1, 300); - return true; +// logger.info("sign={}"+signature); +// String signKey = apiConfig.getSignKey();//TODO 根据appId查询密钥,缓存 +// String newSignature = SignUtils.getSign(signKey, param, "MD5"); +// //加密串不匹配 +// if (!signature.equals(newSignature)) { +// throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"加密串校验失败"); +// } +// Integer cache = RedisCacheUtils.getCacheInteger(redisTemplate, Constant.publicApiNonce+signature); +// if (null != cache) { +// throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"重复调用"); +// } +// RedisCacheUtils.cache(redisTemplate, Constant.publicApiNonce+signature, 1, 300); +// return true; } - private Map StringToMap(String body){ - Map map = new HashMap(); - String bodyDecode = ""; - try { - bodyDecode = URLDecoder.decode(body, "utf-8"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return map; - } - - String[] keyValues = bodyDecode.split("&"); - for (String kv:keyValues) { - if(StringUtils.isBlank(kv) || !kv.contains("=")){ - continue; - } - String[] key_value = kv.split("="); - String key = key_value[0]; - if(StringUtils.isNotBlank(key) - && !"sign".equals(key) - && !"appId".equals(key) - && !"appKey".equals(key) - && !"signKey".equals(key)){ - String value = kv.substring(kv.indexOf('=') + 1, kv.length()); - map.put(key_value[0],value); - } - } - return map; - } +// private Map StringToMap(String body){ +// Map map = new HashMap(); +// String bodyDecode = ""; +// try { +// bodyDecode = URLDecoder.decode(body, "utf-8"); +// } catch (UnsupportedEncodingException e) { +// e.printStackTrace(); +// return map; +// } +// +// String[] keyValues = bodyDecode.split("&"); +// for (String kv:keyValues) { +// if(StringUtils.isBlank(kv) || !kv.contains("=")){ +// continue; +// } +// String[] key_value = kv.split("="); +// String key = key_value[0]; +// if(StringUtils.isNotBlank(key) +// && !"sign".equals(key) +// && !"appId".equals(key) +// && !"appKey".equals(key) +// && !"signKey".equals(key)){ +// String value = kv.substring(kv.indexOf('=') + 1, kv.length()); +// map.put(key_value[0],value); +// } +// } +// return map; +// } } diff --git a/mallinkPublicApi/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java b/mallinkPublicApi/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java index 38aec3039..c9494691b 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java +++ b/mallinkPublicApi/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java @@ -13,7 +13,7 @@ public class BodyReaderHttpServletRequestWrapper extends XssHttpServletRequestWr StringBuilder stringBuilder = new StringBuilder(); BufferedReader bufferedReader = null; try { - InputStream inputStream = request.getInputStream(); + InputStream inputStream = cloneInputStream(request.getInputStream()); if (inputStream != null) { bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"utf-8")); char[] charBuffer = new char[1024]; @@ -70,6 +70,29 @@ public class BodyReaderHttpServletRequestWrapper extends XssHttpServletRequestWr return new BufferedReader(new InputStreamReader(this.getInputStream())); } + /** + * Description: 复制输入流
+ * + * @param inputStream + * @return
+ */ + public InputStream cloneInputStream(ServletInputStream inputStream) { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int len; + try { + while ((len = inputStream.read(buffer)) > -1) { + byteArrayOutputStream.write(buffer, 0, len); + } + byteArrayOutputStream.flush(); + } + catch (IOException e) { + e.printStackTrace(); + } + InputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); + return byteArrayInputStream; + } + public String getBody() { return this.body; } diff --git a/mallinkService/src/main/java/com/iformall/utils/HttpUtil.java b/mallinkService/src/main/java/com/iformall/utils/HttpUtil.java index c5b0d52d2..6b5c32194 100644 --- a/mallinkService/src/main/java/com/iformall/utils/HttpUtil.java +++ b/mallinkService/src/main/java/com/iformall/utils/HttpUtil.java @@ -413,6 +413,65 @@ public class HttpUtil { return null; } + /** + * post请求(用于请求json格式的参数) + * @param url + * @param params + * @return + */ + public static String doPost(String url, Map headMap, String params){ + + CloseableHttpClient httpclient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(url);// 创建httpPost + httpPost.setHeader("Accept", "application/json"); + httpPost.setHeader("Content-Type", "application/json"); + + if(headMap != null){ + Set set = headMap.keySet(); + for(String key: set){ + httpPost.addHeader(key,headMap.get(key)); + } + } + + String charSet = "UTF-8"; + StringEntity entity = new StringEntity(params, charSet); + httpPost.setEntity(entity); + CloseableHttpResponse response = null; + + try { + response = httpclient.execute(httpPost); + StatusLine status = response.getStatusLine(); + int state = status.getStatusCode(); + if (state == HttpStatus.SC_OK) { + HttpEntity responseEntity = response.getEntity(); + String jsonString = EntityUtils.toString(responseEntity); + return jsonString; + } + else{ + logger.info("请求返回:"+state+"("+url+")"); + } + } + catch(Exception e){ + logger.error(e.getMessage()); + return null; + } + finally { + if (response != null) { + try { + response.close(); + } catch (IOException e) { + logger.error(e.getMessage()); + } + } + try { + httpclient.close(); + } catch (IOException e) { + logger.error(e.getMessage()); + } + } + return null; + } + public static String payPost(String url, String params) { RequestBody body = RequestBody.create(CONTENT_TYPE_FORM, params);