diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/controller/AcsController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/controller/AcsController.java index 6a2faf7..4c5396c 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/controller/AcsController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/controller/AcsController.java @@ -1,6 +1,9 @@ package org.jeecg.modules.wms.api.acs.controller; +import java.util.Map; + import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.wms.api.acs.entity.AcsStatus; @@ -11,7 +14,11 @@ import org.jeecg.modules.wms.task.agvTask.service.IAgvTaskService; import org.jeecg.utils.StringUtils; import org.jeecg.utils.constant.QuantityConstant; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.ApiOperation; @@ -23,6 +30,17 @@ public class AcsController extends HuahengBaseController { private IAcsService acsService; @Resource private IAgvTaskService agvTaskService; + +// @PassApiAuthentication + @ApiLogger(apiName = "API接口第三方Token校验测试", from = "TEST") + @ResponseBody + @PostMapping(value = "/testTokenCheck") + public Result<?> testTokenCheck(@RequestBody Map<String, String> paramMap, HttpServletRequest request) { + + + return new Result<>(); + } + @PostMapping("/notifyAGVTask") @ApiOperation("更新AGV状态") diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/service/impl/AcsServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/service/impl/AcsServiceImpl.java index c4f5ab7..5ab2f0c 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/service/impl/AcsServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/service/impl/AcsServiceImpl.java @@ -57,7 +57,7 @@ public class AcsServiceImpl implements IAcsService { } } } - Location toLocation = locationService.getLocationByCode(toPort, warehouseCode); +// Location toLocation = locationService.getLocationByCode(toPort, warehouseCode); agvTask.setPreTaskNo(preTaskNo); boolean success = agvTaskService.updateById(agvTask); if (!success) { @@ -75,7 +75,7 @@ public class AcsServiceImpl implements IAcsService { String url = addressService.getUrlByParam(QuantityConstant.ADDRESS_AGV_TASK_ASSIGN); String jsonParam = JSON.toJSONString(agvEntity); System.out.println(jsonParam); - String body = OkHttpUtils.bodypost(url, jsonParam); + String body = OkHttpUtils.sendPostByJsonStr(url, jsonParam); if (StringUtils.isEmpty(body)) { throw new ServiceException("接口地址错误或返回为空"); } @@ -92,7 +92,7 @@ public class AcsServiceImpl implements IAcsService { agvEntity.setTaskNo(agvTask.getId()); String url = addressService.getUrlByParam(QuantityConstant.ADDRESS_AGV_TASK_CANCEL); String jsonParam = JSON.toJSONString(agvEntity); - String body = OkHttpUtils.bodypost(url, jsonParam); + String body = OkHttpUtils.sendPostByJsonStr(url, jsonParam); if (StringUtils.isEmpty(body)) { throw new ServiceException("接口地址错误或返回为空"); } @@ -110,7 +110,7 @@ public class AcsServiceImpl implements IAcsService { agvEntity.setPriority(agvTask.getPriority()); String url = addressService.getUrlByParam(QuantityConstant.ADDRESS_AGV_TASK_UPDATE); String jsonParam = JSON.toJSONString(agvEntity); - String body = OkHttpUtils.bodypost(url, jsonParam); + String body = OkHttpUtils.sendPostByJsonStr(url, jsonParam); if (StringUtils.isEmpty(body)) { throw new ServiceException("接口地址错误或返回为空"); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/service/impl/ErpServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/service/impl/ErpServiceImpl.java index 2eaea6b..087c8ef 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/service/impl/ErpServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/service/impl/ErpServiceImpl.java @@ -427,7 +427,7 @@ public class ErpServiceImpl implements IErpService { erpBackReceipt.setReceiptDetailList(receiptDetailList); String jsonParam = JSON.toJSONString(erpBackReceipt); System.out.println(jsonParam); - String body = OkHttpUtils.bodypost(url, jsonParam); + String body = OkHttpUtils.sendPostByJsonStr(url, jsonParam); if (StringUtils.isEmpty(body)) { throw new ServiceException("接口地址错误或返回为空"); } @@ -459,7 +459,7 @@ public class ErpServiceImpl implements IErpService { erpBackShipment.setShipmentDetailList(shipmentDetailList); String jsonParam = JSON.toJSONString(erpBackShipment); System.out.println(jsonParam); - String body = OkHttpUtils.bodypost(url, jsonParam); + String body = OkHttpUtils.sendPostByJsonStr(url, jsonParam); if (StringUtils.isEmpty(body)) { throw new ServiceException("接口地址错误或返回为空"); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java index f85b42b..ca70e23 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java @@ -258,7 +258,7 @@ public class MesServiceImpl implements IMesService { String url = addressService.getUrlByParam(QuantityConstant.ADDRESS_MES_BACK_RECEIPT); String jsonParam = JSON.toJSONString(mesBackReceiptList); System.out.println(jsonParam); - String body = OkHttpUtils.bodypost(url, jsonParam); + String body = OkHttpUtils.sendPostByJsonStr(url, jsonParam); if (StringUtils.isEmpty(body)) { throw new ServiceException("接口地址错误或返回为空"); } @@ -327,7 +327,7 @@ public class MesServiceImpl implements IMesService { String url = addressService.getUrlByParam(QuantityConstant.ADDRESS_MES_BACK_SHIPMENT); String jsonParam = JSON.toJSONString(mesBackShipmentList); System.out.println(jsonParam); - String body = OkHttpUtils.bodypost(url, jsonParam); + String body = OkHttpUtils.sendPostByJsonStr(url, jsonParam); if (StringUtils.isEmpty(body)) { throw new ServiceException("接口地址错误或返回为空"); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java index 1ece0dc..dba4ffc 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java @@ -256,7 +256,7 @@ public class WcsServiceImpl implements WcsService { String fromLocationCode = taskHeader.getFromLocationCode(); String toLocationCode = taskHeader.getToLocationCode(); Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode); - Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode); +// Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode); boolean direction = true; // true 执行时是入库动作, false 执行时是出库动作 switch (taskType) { case QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT: @@ -378,7 +378,7 @@ public class WcsServiceImpl implements WcsService { wcsTask = switchTaskTypeToWcs(wcsTask); String jsonParam = JSON.toJSONString(wcsTask); System.out.println(jsonParam); - String body = OkHttpUtils.bodypost(url, jsonParam); + String body = OkHttpUtils.sendPostByJsonStr(url, jsonParam); if (StringUtils.isEmpty(body)) { throw new ServiceException("接口地址错误或返回为空"); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/aspectj/ApiAuthenticationAspect.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/aspectj/ApiAuthenticationAspect.java new file mode 100644 index 0000000..933f760 --- /dev/null +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/aspectj/ApiAuthenticationAspect.java @@ -0,0 +1,92 @@ +package org.jeecg.modules.wms.framework.aspectj; + +import java.lang.reflect.Method; + +import javax.servlet.http.HttpServletRequest; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import lombok.extern.slf4j.Slf4j; + +/** + * 第三方系统调用接口身份认证Aspect + * @author TanYibin + * @createDate 2023年2月14日 + */ +@Slf4j +@Aspect +@Component +@EnableAsync +public class ApiAuthenticationAspect { + + @Pointcut("execution(* org.jeecg.modules.wms.api..*.*(..)) " + + "&& (@annotation(org.springframework.web.bind.annotation.RequestMapping) " + + "|| @annotation(org.springframework.web.bind.annotation.GetMapping) " + + "|| @annotation(org.springframework.web.bind.annotation.PostMapping))") + public void executeController() {} + + /** + * API Token 验证 + * @author TanYibin + * @createDate 2023年2月14日 + * @param joinPoint + * @throws NoSuchMethodException + * @throws Throwable + */ + @Before("executeController()") + public void doBefore(JoinPoint joinPoint) throws NoSuchMethodException, Throwable { + Method method = this.getTargetMethod(joinPoint); + // 检查是否有passtoken注释,有则跳过认证 + if (method.isAnnotationPresent(PassApiAuthentication.class)) { + PassApiAuthentication passApiAuthentication = method.getAnnotation(PassApiAuthentication.class); + if (passApiAuthentication.required()) { + return; + } + } + // 获取request对象 + ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = attributes.getRequest(); + String token = request.getHeader("token"); + log.info("开始校验Token:{}", token); + } + + /** + * 基于连接点信息获取目标方法对象 + * @author TanYibin + * @createDate 2023年2月14日 + * @param joinPoint + * @return + * @throws NoSuchMethodException + */ + private Method getTargetMethod(JoinPoint joinPoint) throws NoSuchMethodException { + // 获取目标类对象 + Class<?> clazz = joinPoint.getTarget().getClass(); + // 获取方法签名信息,方法名和参数列表 + MethodSignature signature = (MethodSignature)joinPoint.getSignature(); + // 获取目标方法对象 + return clazz.getDeclaredMethod(signature.getName(), signature.getParameterTypes()); + } + + /** + * 获取方法类全名+方法名 + * @author TanYibin + * @createDate 2023年2月14日 + * @param method + * @return + */ + private String getClassAndMethodName(Method method) { + // 获取类全名 + String className = method.getDeclaringClass().getName(); + // 获取方法名 + String methodName = method.getName(); + return new StringBuffer(className).append(".").append(methodName).toString(); + } +} diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/aspectj/ApiLogAspect.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/aspectj/ApiLogAspect.java index 716051e..e34bdd5 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/aspectj/ApiLogAspect.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/aspectj/ApiLogAspect.java @@ -1,9 +1,19 @@ package org.jeecg.modules.wms.framework.aspectj; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import okhttp3.Request; -import okhttp3.Response; +import java.net.InetAddress; +import java.net.URL; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Set; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import org.apache.commons.lang.exception.ExceptionUtils; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; @@ -24,21 +34,18 @@ import org.jeecg.utils.constant.QuantityConstant; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpHeaders; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.stereotype.Component; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +import okhttp3.Request; +import okhttp3.Response; /** - * Api调用日志记录处理 + * API调用日志记录处理 * @author huaheng */ @Aspect @@ -65,181 +72,173 @@ public class ApiLogAspect { @Pointcut("@annotation(org.jeecg.modules.wms.framework.aspectj.lang.annotation.ApiLogger)") public void logPointCut() {} - @Around("logPointCut() && @annotation(apiLogger)") + @Around("logPointCut() && @annotation(apiLogger)") public Object around(ProceedingJoinPoint point, ApiLogger apiLogger) throws Throwable { - // 实际上静态方法上的Aop注解无法拦截到 - if ("WMS".equalsIgnoreCase(apiLogger.from())) { - return aroundWms2XXX(point, apiLogger); - } else { - return aroundXXX2Wms(point, apiLogger); - } + return aroundXXX2Wms(point, apiLogger); } - /** 处理xxx调用wms接口的日志 **/ + /** 记录第三方系统调用WMS接口的日志 **/ private Object aroundXXX2Wms(ProceedingJoinPoint point, ApiLogger apiLogger) { Object ret = null; - ApiLog log = initApiLog(apiLogger, point); + ApiLog apiLog = initApiLog(apiLogger, point); try { ret = point.proceed(); } catch (Throwable e) { - setApiLogThrowable(log, e); + setApiLogThrowable(apiLog, e); ret = Result.error(e.getMessage()); return ret; } finally { if (ret != null) { - finishApiLog(log, ret); + finishApiLog(apiLog, ret); } } return ret; } - /** 处理WMS调用xxx接口的日志 **/ - private Object aroundWms2XXX(ProceedingJoinPoint point, ApiLogger apiLogger) { - Object ret = null; - ApiLog log = new ApiLog(); - - HttpURLConnection connection = null; - String body = null; - - try { -// HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); - connection = (HttpURLConnection)point.getArgs()[0]; - body = (String)point.getArgs()[1]; - initApiLog(connection, body); - ret = point.proceed(); - } catch (Throwable e) { - setApiLogThrowable(log, e); - ret = Result.error(e.getMessage()); - } finally { - if (ret != null) { - finishApiLog(log, connection, ret.toString()); - } - } - return ret; - } +// /** 记录WMS调用第三方接口的日志 **/ +// private Object aroundWms2XXX(ProceedingJoinPoint point, ApiLogger apiLogger) { +// Object ret = null; +// ApiLog log = new ApiLog(); +// +// HttpURLConnection connection = null; +// String body = null; +// +// try { +// connection = (HttpURLConnection)point.getArgs()[0]; +// body = (String)point.getArgs()[1]; +// initApiLog(connection, body); +// ret = point.proceed(); +// } catch (Throwable e) { +// setApiLogThrowable(log, e); +// ret = Result.error(e.getMessage()); +// } finally { +// if (ret != null) { +// finishApiLog(log, connection, ret.toString()); +// } +// } +// return ret; +// } + +// /** +// * 记录响应头信息,保存日志到数据库 +// */ +// public static void finishApiLog(ApiLog log, HttpURLConnection connection, String body) { +// try { +// log.setResponseBody(body); +// log.setResponseTime(new Date()); +// Long duration = log.getResponseTime().getTime() - log.getRequestTime().getTime(); +// log.setDuration(duration.intValue()); +// log.setHttpCode(connection.getResponseCode()); +// +// // 响应头 +// Set<String> keyset = connection.getHeaderFields().keySet(); +// ArrayList<String> headerList = new ArrayList<>(); +// Iterator<String> it = keyset.iterator(); +// while (it.hasNext()) { +// String name = it.next(); +// String header = connection.getHeaderField(name); +// if (name == null || "".equals(name)) { +// // 第一行没有name +// // HTTP/1.1 200 OK +// headerList.add(header); +// } else { +// headerList.add(name + ": " + header); +// } +// } +// log.setResponseHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n")); +// Result json = JSON.parseObject(body, Result.class); +// log.setRetCode(json.getCode()); +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// SpringUtils.getBean(ApiLogAspect.class).saveApiLog(log); +// } +// } + +// /** +// * 根据url,从address表中判断调用的去向 +// */ +// public static void parseUrl(ApiLog log, URL url, String warehouseCode) { +// try { +// String[] spList = url.toString().split("/"); +// String apiName = spList[spList.length - 1]; +// String ip = JeecgSystemApplication.getLocalHostExactAddress().getHostAddress(); +// Address address = addressService.getAddressByUrl(url.toString(), warehouseCode); +// log.setApiName(apiName); +// log.setRequestFrom("WMS"); +// log.setIp(ip); +// log.setResponseBy(address.getParam().toUpperCase()); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } + +// /** +// * 记录WMS调用第三方系统接口的请求信息 +// * 在HttpUtils.body POST方法中直接调用本类static方法 +// **/ +// public static ApiLog initApiLog(String Method, String urlStr, String body, HttpHeaders headers, String warehouseCode) { +// ApiLog log = new ApiLog(); +// try { +// URL url = new URL(urlStr); +// log.setApiMethod(Method); +// log.setUrl(urlStr); +// log.setRequestTime(new Date()); +// parseUrl(log, url, warehouseCode); +// +// // 请求头 +// Set<String> keySet = headers.keySet(); +// ArrayList<String> headerList = new ArrayList<>(); +// Iterator<String> it = keySet.iterator(); +// while (it.hasNext()) { +// String name = it.next(); +// String header = String.valueOf(headers.getContentType()); +// headerList.add(name + ": " + header); +// } +// +// log.setRequestHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n")); +// log.setRequestBody(body); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// +// return log; +// } + +// /** +// * 记录WMS调用第三方系统接口的请求信息 +// * 在HttpUtils.body POST方法中直接调用本类static方法 +// **/ +// public static ApiLog initApiLog(HttpURLConnection connection, String body) { +// ApiLog log = new ApiLog(); +// try { +// log.setApiMethod(connection.getRequestMethod()); +// log.setUrl(connection.getURL().toString()); +// log.setRequestTime(new Date()); +// parseUrl(log, connection.getURL()); +// +// // 请求头 +// Set<String> keySet = connection.getRequestProperties().keySet(); +// ArrayList<String> headerList = new ArrayList<>(); +// Iterator<String> it = keySet.iterator(); +// while (it.hasNext()) { +// String name = it.next(); +// String header = connection.getRequestProperty(name); +// headerList.add(name + ":" + header); +// } +// +// log.setRequestHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n")); +// log.setRequestBody(body); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// +// return log; +// } /** - * 记录响应头信息 - **/ - public static void finishApiLog(ApiLog log, HttpURLConnection connection, String body) { - try { - log.setResponseBody(body); - log.setResponseTime(new Date()); - Long duration = log.getResponseTime().getTime() - log.getRequestTime().getTime(); - log.setDuration(duration.intValue()); - log.setHttpCode(connection.getResponseCode()); - - // 响应头 - Set<String> keyset = connection.getHeaderFields().keySet(); - ArrayList<String> headerList = new ArrayList<>(); - Iterator<String> it = keyset.iterator(); - while (it.hasNext()) { - String name = it.next(); - String header = connection.getHeaderField(name); - if (name == null || "".equals(name)) { - // 第一行没有name - // HTTP/1.1 200 OK - headerList.add(header); - } else { - headerList.add(name + ": " + header); - } - } - log.setResponseHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n")); - Result json = JSON.parseObject(body, Result.class); - log.setRetCode(json.getCode()); - } catch (Exception e) { - e.printStackTrace(); - } finally { - SpringUtils.getBean(ApiLogAspect.class).saveApiLog(log); - } - } - - /** - * 根据url,从address表中判断调用的去向 - */ - public static void parseUrl(ApiLog log, URL url, String warehouseCode) { - try { - String[] spList = url.toString().split("/"); - String apiName = spList[spList.length - 1]; -// int index = url.toString().lastIndexOf(apiName); -// String addUrl = url.toString().substring(0, index); - String ip = JeecgSystemApplication.getLocalHostExactAddress().getHostAddress(); - Address address = addressService.getAddressByUrl(url.toString(), warehouseCode); - log.setApiName(apiName); - log.setRequestFrom("WMS"); - log.setIp(ip); - log.setResponseBy(address.getParam().toUpperCase()); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 记录WMS调用外接口的请求信息 - * 在HttpUtils.body POST方法中直接调用本类static方法 - **/ - public static ApiLog initApiLog(String Method, String urlStr, String body, HttpHeaders headers, String warehouseCode) { - ApiLog log = new ApiLog(); - try { - URL url = new URL(urlStr); - log.setApiMethod(Method); - log.setUrl(urlStr); - log.setRequestTime(new Date()); - parseUrl(log, url, warehouseCode); - - // 请求头 - Set<String> keySet = headers.keySet(); - ArrayList<String> headerList = new ArrayList<>(); - Iterator<String> it = keySet.iterator(); - while (it.hasNext()) { - String name = it.next(); - String header = String.valueOf(headers.getContentType()); - headerList.add(name + ": " + header); - } - - log.setRequestHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n")); - log.setRequestBody(body); - } catch (Exception e) { - e.printStackTrace(); - } - - return log; - } - - /** - * 记录WMS调用外接口的请求信息 - * 在HttpUtils.body POST方法中直接调用本类static方法 - **/ - public static ApiLog initApiLog(HttpURLConnection connection, String body) { - ApiLog log = new ApiLog(); - try { - log.setApiMethod(connection.getRequestMethod()); - log.setUrl(connection.getURL().toString()); - log.setRequestTime(new Date()); - parseUrl(log, connection.getURL()); - - // 请求头 - Set<String> keySet = connection.getRequestProperties().keySet(); - ArrayList<String> headerList = new ArrayList<>(); - Iterator<String> it = keySet.iterator(); - while (it.hasNext()) { - String name = it.next(); - String header = connection.getRequestProperty(name); - headerList.add(name + ":" + header); - } - - log.setRequestHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n")); - log.setRequestBody(body); - } catch (Exception e) { - e.printStackTrace(); - } - - return log; - } - - /** - * 记录WMS调用外接口的请求信息 - * 在HttpUtils.bodypost方法中直接调用本类static方法 + * 记录WMS调用第三方系统接口的请求信息 + * 在OKHttpUtils.bodypost方法中直接调用本类static方法 **/ public static ApiLog initApiLog(Request request, String body) { ApiLog log = new ApiLog(); @@ -294,8 +293,6 @@ public class ApiLogAspect { try { String[] spList = url.toString().split("/"); String apiName = spList[spList.length - 1]; -// int index = url.toString().lastIndexOf(apiName); -// String addUrl = url.toString().substring(0, index); String ip = JeecgSystemApplication.getLocalHostExactAddress().getHostAddress(); Address address = addressService.getAddressByUrl(url.toString(), QuantityConstant.DEFAULT_WAREHOUSE); log.setApiName(apiName); @@ -307,40 +304,40 @@ public class ApiLogAspect { } } - /** - * 记录响应头信息 - **/ - public static void finishApiLog(ApiLog log, HttpHeaders headers, String body) { - try { - log.setResponseBody(body); - log.setResponseTime(new Date()); - Long duration = log.getResponseTime().getTime() - log.getRequestTime().getTime(); - log.setDuration(duration.intValue()); - log.setHttpCode(200); - - // 响应头 - Set<String> keyset = headers.keySet(); - ArrayList<String> headerList = new ArrayList<>(); - Iterator<String> it = keyset.iterator(); - while (it.hasNext()) { - String name = it.next(); - String header = String.valueOf(headers.getContentType()); - if (name == null || "".equals(name)) - // 第一行没有name - // HTTP/1.1 200 OK - headerList.add(header); - else - headerList.add(name + ": " + header); - } - log.setResponseHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n")); - Result json = JSON.parseObject(body, Result.class); - log.setRetCode(json.getCode()); - } catch (Exception e) { - e.printStackTrace(); - } finally { - SpringUtils.getBean(ApiLogAspect.class).saveApiLog(log); - } - } +// /** +// * 记录响应头信息 +// **/ +// public static void finishApiLog(ApiLog log, HttpHeaders headers, String body) { +// try { +// log.setResponseBody(body); +// log.setResponseTime(new Date()); +// Long duration = log.getResponseTime().getTime() - log.getRequestTime().getTime(); +// log.setDuration(duration.intValue()); +// log.setHttpCode(200); +// +// // 响应头 +// Set<String> keyset = headers.keySet(); +// ArrayList<String> headerList = new ArrayList<>(); +// Iterator<String> it = keyset.iterator(); +// while (it.hasNext()) { +// String name = it.next(); +// String header = String.valueOf(headers.getContentType()); +// if (name == null || "".equals(name)) +// // 第一行没有name +// // HTTP/1.1 200 OK +// headerList.add(header); +// else +// headerList.add(name + ": " + header); +// } +// log.setResponseHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n")); +// Result json = JSON.parseObject(body, Result.class); +// log.setRetCode(json.getCode()); +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// SpringUtils.getBean(ApiLogAspect.class).saveApiLog(log); +// } +// } private ApiLog initApiLog(ApiLogger apiLogger, ProceedingJoinPoint point) { ApiLog log = new ApiLog(); @@ -351,19 +348,16 @@ public class ApiLogAspect { log.setApiName(apiLogger.apiName()); HttpServletRequest request = ServletUtils.getRequest(); - String qryStr = request.getQueryString(); String url = request.getRequestURL().toString(); if (StringUtils.isNotEmpty(qryStr)) { url = url + "?" + qryStr; } log.setUrl(url); - log.setApiMethod(request.getMethod()); - log.setIp(request.getRemoteAddr()); + log.setIp(this.getIpAddr(request)); rebuildRequestHeader(log); - rebuildRequestBody(log, request); // 如果reqeust中取不到post参数,就从接口方法参数中取json对象 @@ -410,7 +404,7 @@ public class ApiLogAspect { ex.printStackTrace(); } } - + public static void setApiLogThrowable(ApiLog log, Throwable e) { try { String exception = ExceptionUtils.getFullStackTrace(e); @@ -429,7 +423,7 @@ public class ApiLogAspect { while (names.hasMoreElements()) { String name = (String)names.nextElement(); String header = req.getHeader(name); - headerList.add(name + ": " + header); + headerList.add(name + ":" + header); } String headers = org.apache.commons.lang3.StringUtils.join(headerList, "\n"); log.setRequestHeader(headers); @@ -527,4 +521,35 @@ public class ApiLogAspect { e.printStackTrace(); } } + + public String getIpAddr(HttpServletRequest request) { + String ipAddress = request.getHeader("x-forwarded-for"); + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("WL-Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getRemoteAddr(); + if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) { + // 根据网卡取本机配置的IP + InetAddress inet = null; + try { + inet = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + ipAddress = inet.getHostAddress(); + } + } + // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 + // "***.***.***.***".length() = 15 + if (ipAddress != null && ipAddress.length() > 15) { + if (ipAddress.indexOf(",") > 0) { + ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); + } + } + return ipAddress; + } } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/aspectj/PassApiAuthentication.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/aspectj/PassApiAuthentication.java new file mode 100644 index 0000000..604da8a --- /dev/null +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/aspectj/PassApiAuthentication.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.wms.framework.aspectj; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 跳过API身份验证注解 + * @author TanYibin + * @createDate 2023年2月13日 + */ +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface PassApiAuthentication { + boolean required() default true; +} diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/TestController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/TestController.java index 233be7d..945c84e 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/TestController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/TestController.java @@ -43,14 +43,14 @@ public class TestController extends HuahengBaseController { private ISysDataLogService sysDataLogService; - @ApiLogger(apiName = "API接口第三方Token校验测试", from = "TEST") - @ResponseBody - @PostMapping(value = "/api/wms/testTokenCheck") - public Result<?> testTokenCheck(@RequestBody Map<String, String> paramMap, HttpServletRequest request) { - - - return new Result<>(); - } +// @ApiLogger(apiName = "API接口第三方Token校验测试", from = "TEST") +// @ResponseBody +// @PostMapping(value = "/api/wms/testTokenCheck") +// public Result<?> testTokenCheck(@RequestBody Map<String, String> paramMap, HttpServletRequest request) { +// +// +// return new Result<>(); +// } @AutoLog(value = "TestController-testRedis") diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/http/HttpUtils.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/http/HttpUtils.java deleted file mode 100644 index 27ff6dc..0000000 --- a/huaheng-wms-core/src/main/java/org/jeecg/utils/http/HttpUtils.java +++ /dev/null @@ -1,346 +0,0 @@ -package org.jeecg.utils.http; - -import org.apache.commons.io.IOUtils; -import org.apache.http.HttpResponse; -import org.apache.http.HttpStatus; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.jeecg.modules.wms.framework.aspectj.ApiLogAspect; -import org.jeecg.modules.wms.monitor.apiLog.entity.ApiLog; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.net.ssl.*; -import java.io.*; -import java.net.*; -import java.security.cert.X509Certificate; - -/** - * 通用http发送方法 - * @author huaheng - */ -public class HttpUtils { - - private static final Logger log = LoggerFactory.getLogger(HttpUtils.class); - - /** - * 向指定 URL 发送GET方法的请求 - * @param url 发送请求的 URL - * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 - * @return 所代表远程资源的响应结果 - */ - public static String sendGet(String url, String param) { - StringBuilder result = new StringBuilder(); - BufferedReader in = null; - try { - String urlNameString = url + "?" + param; - log.info("sendGet - {}", urlNameString); - URL realUrl = new URL(urlNameString); - URLConnection connection = realUrl.openConnection(); - connection.setRequestProperty("accept", "*/*"); - connection.setRequestProperty("connection", "Keep-Alive"); - connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); - connection.connect(); - in = new BufferedReader(new InputStreamReader(connection.getInputStream())); - String line; - while ((line = in.readLine()) != null) { - result.append(line); - } - log.info("recv - {}", result); - } catch (ConnectException e) { - log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e.getMessage()); - } catch (SocketTimeoutException e) { - log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e.getMessage()); - } catch (IOException e) { - log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e.getMessage()); - } catch (Exception e) { - log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e.getMessage()); - } finally { - try { - if (in != null) { - in.close(); - } - } catch (Exception ex) { - log.error("调用in.close Exception, url=" + url + ",param=" + param, ex.getMessage()); - } - } - return result.toString(); - } - - // post请求 为erp回传定制 - public static String erppost(String strURL, String params, String key) { - HttpURLConnection connection = null; - InputStream is = null; - OutputStreamWriter out = null; - String result = null; - ApiLog log = null; - - try { - URL url = new URL(strURL);// 创建连接 -// String ur = "" + url; - connection = (HttpURLConnection)url.openConnection(); - connection.setDoOutput(true); - connection.setDoInput(true); - connection.setUseCaches(false); - connection.setInstanceFollowRedirects(true); - connection.setRequestMethod("POST");// 设置请求方式 - connection.setRequestProperty("Accept", "application/json");// 设置接收数据的格式 - connection.setRequestProperty("Content-Type", "application/json");// 设置发送数据的格式 - connection.setRequestProperty("apiKey", key);// 测试环境key - log = ApiLogAspect.initApiLog(connection, params); - connection.connect(); - out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");// utf-8编码 - out.append(params); - out.flush(); - out.close(); // 读取响应 - int length = (int)connection.getContentLength();// 获取长度 - is = connection.getInputStream(); -// BufferedReader br = new BufferedReader(new InputStreamReader(is)); - length = 10000; - if (length > 0) { - byte[] data = new byte[length]; - byte[] temp = new byte[512]; - int readLen = 0; - int destPos = 0; - while ((readLen = is.read(temp)) > 0) { - System.arraycopy(temp, 0, data, destPos, readLen); - destPos += readLen; - } - result = new String(data, "UTF-8"); - System.out.println(result); - } - } catch (Exception e) { - ApiLogAspect.setApiLogException(log, e); - e.printStackTrace(); - } finally { - ApiLogAspect.finishApiLog(log, connection, result); - if (connection != null) - connection.disconnect(); - IOUtils.closeQuietly(out, is); - } - return result; - } - - /** - * 向指定 URL 发送POST方法的请求 - * @param url 发送请求的 URL - * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 - * @return 所代表远程资源的响应结果 - */ - public static String sendPost(String url, String param) { - PrintWriter out = null; - BufferedReader in = null; - StringBuilder result = new StringBuilder(); - try { - String urlNameString = url + "?" + param; - log.info("sendPost - {}", urlNameString); - URL realUrl = new URL(urlNameString); - URLConnection conn = realUrl.openConnection(); - conn.setRequestProperty("accept", "*/*"); - conn.setRequestProperty("connection", "Keep-Alive"); - conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); - conn.setRequestProperty("Accept-Charset", "utf-8"); - conn.setRequestProperty("contentType", "utf-8"); - conn.setDoOutput(true); - conn.setDoInput(true); - out = new PrintWriter(conn.getOutputStream()); - out.print(param); - out.flush(); - if (((HttpURLConnection)conn).getResponseCode() >= 390) { - in = new BufferedReader(new InputStreamReader(((HttpURLConnection)conn).getErrorStream())); - } else { - in = new BufferedReader(new InputStreamReader(conn.getInputStream())); - } -// in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8")); - String line; - while ((line = in.readLine()) != null) { - result.append(line); - } - log.info("recv - {}", result); - } catch (ConnectException e) { - log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e.getMessage()); - } catch (SocketTimeoutException e) { - log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e.getMessage()); - } catch (IOException e) { - log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e.getMessage()); - } catch (Exception e) { - log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e.getMessage()); - } finally { - try { - if (out != null) { - out.close(); - } - if (in != null) { - in.close(); - } - } catch (IOException ex) { - log.error("调用in.close Exception, url=" + url + ",param=" + param, ex.getMessage()); - } - } - return result.toString(); - } - - public static String sendSSLPost(String url, String param) { - StringBuilder result = new StringBuilder(); - String urlNameString = url + "?" + param; - try { - log.info("sendSSLPost - {}", urlNameString); - SSLContext sc = SSLContext.getInstance("SSL"); - sc.init(null, new TrustManager[] {new TrustAnyTrustManager()}, new java.security.SecureRandom()); - URL console = new URL(urlNameString); - HttpsURLConnection conn = (HttpsURLConnection)console.openConnection(); - conn.setRequestProperty("accept", "*/*"); - conn.setRequestProperty("connection", "Keep-Alive"); - conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); - conn.setRequestProperty("Accept-Charset", "utf-8"); - conn.setRequestProperty("contentType", "utf-8"); - conn.setDoOutput(true); - conn.setDoInput(true); - - conn.setSSLSocketFactory(sc.getSocketFactory()); - conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); - conn.connect(); - InputStream is = conn.getInputStream(); - BufferedReader br = new BufferedReader(new InputStreamReader(is)); - String ret = ""; - while ((ret = br.readLine()) != null) { - if (ret != null && !"".equals(ret.trim())) { - result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8")); - } - } - log.info("recv - {}", result); - conn.disconnect(); - br.close(); - } catch (ConnectException e) { - log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e.getMessage()); - } catch (SocketTimeoutException e) { - log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e.getMessage()); - } catch (IOException e) { - log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e.getMessage()); - } catch (Exception e) { - log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e.getMessage()); - } - return result.toString(); - } - - // 此方法是将参数以body形式发送post请求 - public static String bodypost(String strURL, String params) { - System.out.println(strURL); - System.out.println(params); - HttpURLConnection connection = null; - InputStream is = null; - OutputStreamWriter out = null; - String result = null; - ApiLog log = null; - - try { - URL url = new URL(strURL);// 创建连接 - String stringUrl = "" + url; - connection = (HttpURLConnection)url.openConnection(); - connection.setDoOutput(true); - connection.setDoInput(true); - connection.setUseCaches(false); - connection.setInstanceFollowRedirects(true); - connection.setRequestMethod("POST");// 设置请求方式 - connection.setRequestProperty("Accept", "application/json");// 设置接收数据的格式 - connection.setRequestProperty("Content-Type", "application/json");// 设置发送数据的格式 - if ((stringUrl.contains("10.0.15.19"))) { - connection.setRequestProperty("apiKey", "c687ef505557428595e6a596fba5de6c");// 测试环境key - } - log = ApiLogAspect.initApiLog(connection, params); - connection.connect(); - out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");// utf-8编码 - out.append(params); - out.flush(); - out.close(); // 读取响应 - int length = (int)connection.getContentLength();// 获取长度 - is = connection.getInputStream(); -// BufferedReader br = new BufferedReader(new InputStreamReader(is)); - length = 10000; - if (length > 0) { - byte[] data = new byte[length]; - byte[] temp = new byte[512]; - int readLen = 0; - int destPos = 0; - while ((readLen = is.read(temp)) > 0) { - System.arraycopy(temp, 0, data, destPos, readLen); - destPos += readLen; - } - result = new String(data, "UTF-8"); - System.out.println(result); - } - } catch (Exception e) { - ApiLogAspect.setApiLogException(log, e); - e.printStackTrace(); - } finally { - ApiLogAspect.finishApiLog(log, connection, result); - if (connection != null) - connection.disconnect(); - IOUtils.closeQuietly(out, is); - } - return result; - } - - /** - * 发送以json为参数的POST请求 - * @param json - * @param url - * @return - */ - public static String sendJsonPostToken(String json, String url) { - String result = ""; - HttpPost post = new HttpPost(url); - try { - CloseableHttpClient httpClient = HttpClients.createDefault(); - - post.setHeader("Content-Type", "application/json;charset=utf-8"); - post.addHeader("Authorization", "Basic YWRtaW46"); - StringEntity postingString = new StringEntity(json, "utf-8"); - post.setEntity(postingString); - HttpResponse response = httpClient.execute(post); - - InputStream in = response.getEntity().getContent(); - BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf-8")); - StringBuilder strber = new StringBuilder(); - String line = null; - while ((line = br.readLine()) != null) { - strber.append(line + '\n'); - } - br.close(); - in.close(); - result = strber.toString(); - if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { - result = "服务器异常"; - } - } catch (Exception e) { - System.out.println("请求异常"); - throw new RuntimeException(e); - } finally { - post.abort(); - } - return result; - } - - private static class TrustAnyTrustManager implements X509TrustManager { - @Override - public void checkClientTrusted(X509Certificate[] chain, String authType) {} - - @Override - public void checkServerTrusted(X509Certificate[] chain, String authType) {} - - @Override - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[] {}; - } - } - - private static class TrustAnyHostnameVerifier implements HostnameVerifier { - @Override - public boolean verify(String hostname, SSLSession session) { - return true; - } - } - -} diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/http/OkHttpUtils.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/http/OkHttpUtils.java index 3cb4a2a..aa05386 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/utils/http/OkHttpUtils.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/http/OkHttpUtils.java @@ -3,6 +3,8 @@ package org.jeecg.utils.http; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.parser.Feature; + +import net.bytebuddy.asm.Advice.This; import okhttp3.*; import org.jeecg.modules.wms.framework.aspectj.ApiLogAspect; import org.jeecg.modules.wms.monitor.apiLog.entity.ApiLog; @@ -76,54 +78,68 @@ public class OkHttpUtils { * @return 所代表远程资源的响应结果 */ public static String sendGet(String url, String param) { + ApiLog apiLog = null; // headers 请求头 Map<String, String> headers = new HashMap<>(); // 请求URI String urlNameString = url + "?" + param; - Request.Builder builder = new Request.Builder(); buildHeader(builder, headers); Request request = builder.url(urlNameString).get().build(); Response response = null; + String result = null; try { + apiLog = ApiLogAspect.initApiLog(request, param); response = HTTP_CLIENT.newCall(request).execute(); if (response.isSuccessful() && Objects.nonNull(response.body())) { - String result = response.body().string(); - log.info("执行GET请求,url:{},header:{},param:{} 成功,返回数据:{}", url, JSON.toJSONString(headers), param, result); - return result; + result = response.body().string(); + log.info("执行GET请求,url:{},header:{},param:{} 成功,返回结果:{}", url, JSON.toJSONString(headers), param, result); } } catch (IOException e) { log.error("执行GET请求,url:{},header:{},param:{} 失败!", url, JSON.toJSONString(headers), param, e); + ApiLogAspect.setApiLogException(apiLog, e); + } finally { + ApiLogAspect.finishApiLog(apiLog, response, result); } - return ""; + return result; } /** * 向指定 URL 发送POST方法的请求 - * @param url 发送请求的 URL // * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 - * @return 所代表远程资源的响应结果 + * @param url 发送请求的 URL + * @param param 请求参数,请求参数是 name1=value1&name2=value2 的形式。 + * @return 远程资源的响应结果 + * @throws IOException */ public static String sendPost(String url, String param) { + ApiLog apiLog = null; FormBody.Builder builder = new FormBody.Builder(); String urlNameString = url + "?" + param; FormBody body = builder.build(); Request request = new Request.Builder().url(urlNameString).post(body).build(); Response response = null; + String result = null; try { + apiLog = ApiLogAspect.initApiLog(request, param); response = HTTP_CLIENT.newCall(request).execute(); // 调用成功 if (response.isSuccessful() && response.body() != null) { - return response.body().string(); + result = response.body().string(); + log.info("执行GET请求,url:{},param:{} 成功,返回结果:{}", url, param, result); } } catch (IOException e) { - e.printStackTrace(); + log.error("执行GET请求,url:{},param:{} 失败!", url, param, e); + ApiLogAspect.setApiLogException(apiLog, e); + } finally { + ApiLogAspect.finishApiLog(apiLog, response, result); } - return ""; + return result; } - // 此方法是将参数以body形式发送post请求 - public static String bodypost(String url, String json) { + /** JSONString形式发送POST请求 + * @throws IOException */ + public static String sendPostByJsonStr(String url, String json) { ApiLog apiLog = null; // using above json body as a input to post API call RequestBody body = RequestBody.create(MEDIA_TYPE_JSON, json); @@ -144,8 +160,8 @@ public class OkHttpUtils { log.info("执行POST请求,url:{},header:{},param:{} 成功,返回结果:{}", url, JSON.toJSONString(headers), json, result); } } catch (IOException e) { - ApiLogAspect.setApiLogException(apiLog, e); log.error("执行POST请求,url:{},header:{},param:{} 失败!", url, JSON.toJSONString(headers), json, e); + ApiLogAspect.setApiLogException(apiLog, e); } finally { ApiLogAspect.finishApiLog(apiLog, response, result); } @@ -168,19 +184,15 @@ public class OkHttpUtils { } /** - * 支持嵌套泛型的post请求。 - * - * <pre> - * Type type = new TypeToken<Results<User>>() {}.getType(); - * - * <pre/> + * 支持嵌套泛型的POST请求 * @param url 链接 * @param json 请求json * @param type 嵌套泛型 * @return 响应对象, 可进行强转。 + * @throws IOException */ - public static <T> T post(String url, String json, TypeReference<T> type) { - String result = bodypost(url, json); + public static <T> T sendPostByJsonStr(String url, String jsonString, TypeReference<T> type) throws IOException { + String result = sendPostByJsonStr(url, jsonString); if (Objects.nonNull(result) && Objects.nonNull(type)) { return JSON.parseObject(result, type); }