Przeglądaj źródła

api

release_toaliyun_real
xhxu 5 lat temu
rodzic
commit
2063d7b89f
4 zmienionych plików z 174 dodań i 55 usunięć
  1. +4
    -4
      mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java
  2. +87
    -50
      mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java
  3. +24
    -1
      mallinkPublicApi/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java
  4. +59
    -0
      mallinkService/src/main/java/com/iformall/utils/HttpUtil.java

+ 4
- 4
mallinkPublicApi/src/main/java/com/iformall/controller/UserBasicInfoController.java Wyświetl plik

@@ -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<String,String> map) {
public ResultData userRegister(@RequestBody Map<String,Object> 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);



+ 87
- 50
mallinkPublicApi/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java Wyświetl plik

@@ -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<String, String> param = StringToMap(body);
if(param.isEmpty()){
try{
// JSONObject parameterMap = JSON.parseObject(body);
Map<String, String> parameterMap = JSONObject.parseObject(body, new TypeReference<Map<String, String>>() {
});

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<String, String> 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<String, String> StringToMap(String body){
Map<String, String> map = new HashMap<String, String>();
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<String, String> StringToMap(String body){
// Map<String, String> map = new HashMap<String, String>();
// 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;
// }

}

+ 24
- 1
mallinkPublicApi/src/main/java/com/iformall/interceptor/BodyReaderHttpServletRequestWrapper.java Wyświetl plik

@@ -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: 复制输入流</br>
*
* @param inputStream
* @return</br>
*/
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;
}


+ 59
- 0
mallinkService/src/main/java/com/iformall/utils/HttpUtil.java Wyświetl plik

@@ -413,6 +413,65 @@ public class HttpUtil {
return null;
}

/**
* post请求(用于请求json格式的参数)
* @param url
* @param params
* @return
*/
public static String doPost(String url, Map<String,String> 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<String> 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);


Ładowanie…
Anuluj
Zapisz