Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dm_project
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
姚本章
dm_project
Commits
d1f3e7bf
Commit
d1f3e7bf
authored
Feb 02, 2021
by
zhangc
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修复api日志收集bug
parent
03a1b37f
Changes
17
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
645 additions
and
234 deletions
+645
-234
api_gateway.sql
database/zc/api_gateway.sql
+1
-1
OpenApiResultCode.java
...rc/main/java/com/jz/dm/common/util/OpenApiResultCode.java
+14
-6
WebAppConfigurer.java
...eway/src/main/java/com/jz/dm/config/WebAppConfigurer.java
+0
-1
AuthFilter.java
...apigateway/src/main/java/com/jz/dm/filter/AuthFilter.java
+1
-1
CheckArgsFilter.java
...teway/src/main/java/com/jz/dm/filter/CheckArgsFilter.java
+1
-1
InvokeRouteFilter.java
...way/src/main/java/com/jz/dm/filter/InvokeRouteFilter.java
+10
-7
VerifySignFilter.java
...eway/src/main/java/com/jz/dm/filter/VerifySignFilter.java
+3
-10
DefaultOpenApiDispatcher.java
...main/java/com/jz/dm/gateway/DefaultOpenApiDispatcher.java
+2
-2
ApiInterface.java
...y/src/main/java/com/jz/dm/models/domian/ApiInterface.java
+11
-0
ApiInterfaceCustom.java
...main/java/com/jz/dm/models/domian/ApiInterfaceCustom.java
+0
-3
ApiReqLog.java
...eway/src/main/java/com/jz/dm/models/domian/ApiReqLog.java
+6
-2
ApiLogService.java
...ateway/src/main/java/com/jz/dm/service/ApiLogService.java
+8
-6
ApiLogServiceImpl.java
...c/main/java/com/jz/dm/service/impl/ApiLogServiceImpl.java
+71
-39
ApiQueryService.java
.../main/java/com/jz/dm/service/request/ApiQueryService.java
+77
-63
ApiQueryTestService.java
...n/java/com/jz/dm/service/request/ApiQueryTestService.java
+382
-41
SystemLogAspect.java
...y/src/main/java/com/jz/dm/web/aspect/SystemLogAspect.java
+54
-49
UrlUtil.java
jz-dm-common/src/main/java/com/jz/common/utils/UrlUtil.java
+4
-2
No files found.
database/zc/api_gateway.sql
View file @
d1f3e7bf
...
...
@@ -140,10 +140,10 @@ CREATE TABLE `t_api_req_log` (
`response_params`
text
COMMENT
'返回参数'
,
`request_url`
varchar
(
64
)
DEFAULT
NULL
COMMENT
'请求路径'
,
`request_method`
varchar
(
100
)
DEFAULT
NULL
COMMENT
'请求方法'
,
`request_type`
varchar
(
20
)
DEFAULT
NULL
COMMENT
'请求类型(方式)'
,
`encry_mode`
varchar
(
20
)
DEFAULT
NULL
COMMENT
'加密方式:MD5,RSA'
,
`trans_mode`
varchar
(
20
)
DEFAULT
NULL
COMMENT
'传输方式:POST,GET'
,
`request_token`
varchar
(
64
)
DEFAULT
NULL
COMMENT
'客户请求token'
,
`handler_status`
varchar
(
20
)
NOT
NULL
DEFAULT
'0'
COMMENT
'处理状态: 0未处理,1已处理'
`request_consuming`
varchar
(
64
)
DEFAULT
NULL
COMMENT
'请求总耗时'
,
`request_start_time`
datetime
DEFAULT
NULL
COMMENT
'请求开始时间'
,
`request_end_time`
datetime
DEFAULT
NULL
COMMENT
'请求结束时间'
,
...
...
jz-dm-apigateway/src/main/java/com/jz/dm/common/util/OpenApiResultCode.java
View file @
d1f3e7bf
...
...
@@ -21,29 +21,37 @@ public enum OpenApiResultCode implements ResultCode {
/** 无效参数 */
ILLEGAL_ARGUMENT
(
"ILLEGAL_ARGUMENT"
,
"无效参数"
),
/** 请求数据异常 */
REQUEST_DATA_EXCEPTION
(
"REQUEST_DATA_EXCEPTION"
,
"请求数据异常"
),
/** 名类型不支持 */
SIGN_TYPE_NOT_SUPPORT
(
"SIGN_TYPE_NOT_SUPPORT"
,
"签名类型不支持"
),
/** 数据签名错误 */
DATA_SIGN_ERROR
(
"DATA_SIGN_ERROR"
,
"数据签名错误"
),
/** 公钥格式错误 */
/* *//** 公钥格式错误 *//*
PUBLIC_KEY_FORMAT_ERROR("PUBLIC_KEY_FORMAT_ERROR", "公钥格式错误"),
/** 私钥格式错误 */
PRIVATE_KEY_FORMAT_ERROR
(
"PRIVATE_KEY_FORMAT_ERROR"
,
"私钥格式错误"
),
*//** 私钥格式错误 *//*
PRIVATE_KEY_FORMAT_ERROR("PRIVATE_KEY_FORMAT_ERROR", "私钥格式错误"),
*/
/** 响应数据格式错误 */
RESPONSE_DATA_FORMAT_ERROR
(
"RESPONSE_DATA_FORMAT_ERROR"
,
"响应数据格式错误"
),
/** 签名校验错误 */
SIGN_VERIFY_ERROR
(
"SIGN_VERIFY_ERROR"
,
"签名校验错误"
),
/*
*//** 不支持该信息摘要算法 *//*
NO_SUCH_MD_ALGORITHM("NO_SUCH_MD_ALGORITHM", "不支持该信息摘要算法"),*/
/** 不支持该信息摘要算法 */
NO_SUCH_MD_ALGORITHM
(
"NO_SUCH_MD_ALGORITHM"
,
"不支持该信息摘要算法"
),
/*
*/
/** 信息摘要错误 *//*
/** 信息摘要错误 */
MESSAGE_DIGEST_ERROR("MESSAGE_DIGEST_ERROR", "信息摘要错误"),
*/
/** 数据加密错误 */
DATA_ENCRYPTION_ERROR
(
"DATA_ENCRYPTION_ERROR"
,
"数据加密错误"
),;
...
...
jz-dm-apigateway/src/main/java/com/jz/dm/config/WebAppConfigurer.java
View file @
d1f3e7bf
package
com
.
jz
.
dm
.
config
;
import
com.jz.dm.web.interceptor.AccessLimitInterceptor
;
import
com.jz.dm.web.request.ApiGatewayRequestInterceptor
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
...
...
jz-dm-apigateway/src/main/java/com/jz/dm/filter/AuthFilter.java
View file @
d1f3e7bf
...
...
@@ -79,7 +79,7 @@ public class AuthFilter extends AbstractFilter {
try
{
ApiInterface
apiInterface
=
apiInterfaceService
.
getApiInfo
(
request
.
getApiKey
());
if
(
null
==
apiInterface
)
{
throw
new
GatewayException
(
GatewayResultCode
.
ILLEGAL_REQUE
ST
);
throw
new
GatewayException
(
GatewayResultCode
.
REQUEST_INFO_UNEXI
ST
);
}
//下架状态$$ 检查是否有有效调用的api,如果有就放行,没有就置为无效
if
(
ApiStatusEnum
.
SOLDOUT
.
name
().
equals
(
apiInterface
.
getStatus
()))
{
...
...
jz-dm-apigateway/src/main/java/com/jz/dm/filter/CheckArgsFilter.java
View file @
d1f3e7bf
...
...
@@ -42,7 +42,7 @@ public class CheckArgsFilter extends AbstractFilter {
request
.
setFormat
(
Format
.
JSON
.
name
());
}
try
{
request
.
setVersion
(
"
v
1.0.0"
);
request
.
setVersion
(
"1.0.0"
);
//格式,目前仅支持JSON
Format
.
valueOf
(
request
.
getFormat
());
//请求使用的编码格式,如UTF-8,GBK,GB2312等
...
...
jz-dm-apigateway/src/main/java/com/jz/dm/filter/InvokeRouteFilter.java
View file @
d1f3e7bf
package
com
.
jz
.
dm
.
filter
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONException
;
import
com.alibaba.fastjson.JSONObject
;
import
com.jz.dm.common.constant.Constants
;
import
com.jz.dm.common.constant.LoggingConstants
;
...
...
@@ -9,6 +10,7 @@ import com.jz.dm.gateway.DefaultOpenApiDispatcher;
import
com.jz.dm.models.enity.DispatchContext
;
import
com.jz.dm.models.enity.GatewayRequest
;
import
com.jz.dm.models.enity.GatewayResponse
;
import
lombok.extern.slf4j.Slf4j
;
import
org.slf4j.Logger
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
...
...
@@ -19,6 +21,7 @@ import org.springframework.stereotype.Component;
* @author key
*/
@Component
(
"invokeRouteFilter"
)
@Slf4j
public
class
InvokeRouteFilter
extends
AbstractFilter
{
/** openapi dispatcher logger */
...
...
@@ -41,14 +44,13 @@ public class InvokeRouteFilter extends AbstractFilter {
protected
void
internalDoFilter
(
GatewayRequest
request
,
GatewayResponse
response
,
FilterChain
chain
)
{
String
openApiResponse
=
null
;
//当前系统时间戳
long
startTime
=
System
.
currentTimeMillis
();
try
{
DispatchContext
context
=
new
DispatchContext
();
context
.
setApiKey
(
request
.
getApiKey
());
//apiKey
context
.
setOpenApiMethod
(
request
.
getMethod
());
//方法 例如:tradd.add
context
.
setOpenApiParams
(
request
.
getParams
());
//入参
context
.
setOpenApiVersion
(
request
.
getVersion
());
//版本号
context
.
setApiKey
(
request
.
getApiKey
());
context
.
setOpenApiMethod
(
request
.
getMethod
());
context
.
setOpenApiParams
(
request
.
getParams
());
context
.
setOpenApiVersion
(
request
.
getVersion
());
//扩展参数
for
(
GatewayRequest
.
Attribute
attribute
:
request
.
getExtAttributes
().
values
())
{
if
(
attribute
!=
null
&&
attribute
.
isPass
)
{
...
...
@@ -56,10 +58,11 @@ public class InvokeRouteFilter extends AbstractFilter {
}
}
openApiResponse
=
defaultOpenApiDispatcher
.
doDispatch
(
context
);
JSONObject
jsonObject
=
(
JSONObject
)
JSON
.
parse
(
openApiResponse
);
response
.
setAttribute
(
jsonObject
);
}
finally
{
}
catch
(
JSONException
ex
){
log
.
error
(
"json exchange exception ="
,
ex
.
getMessage
());
}
finally
{
long
elapseTime
=
System
.
currentTimeMillis
()
-
startTime
;
LogUtil
.
info
(
DISPATCHER_LOGGER
,
"gateway do default dispatch,request="
+
request
+
",response="
+
openApiResponse
...
...
jz-dm-apigateway/src/main/java/com/jz/dm/filter/VerifySignFilter.java
View file @
d1f3e7bf
...
...
@@ -5,7 +5,6 @@ import com.jz.common.utils.Md5;
import
com.jz.dm.common.constant.Constants
;
import
com.jz.dm.common.enums.GatewayResultCode
;
import
com.jz.dm.common.exception.GatewayException
;
import
com.jz.dm.common.exception.SignatureException
;
import
com.jz.dm.common.util.LogUtil
;
import
com.jz.dm.common.util.MapUtil
;
import
com.jz.dm.models.domian.ApiAuth
;
...
...
@@ -52,7 +51,7 @@ public class VerifySignFilter extends AbstractFilter {
//需要传入授权码
ApiAuth
apiAuthInfo
=
apiInterfaceService
.
getApiAuthInfo
(
request
.
getApiKey
(),
authCode
);
if
(
null
==
apiAuthInfo
)
{
throw
new
GatewayException
(
GatewayResultCode
.
ILLEGAL_REQUEST
);
throw
new
GatewayException
(
GatewayResultCode
.
REQUEST_NOT_AUTH
);
}
String
sign
=
Md5
.
encrypt
(
signParams
,
apiAuthInfo
.
getSalt
());
if
(!
request
.
getSign
().
equals
(
sign
))
{
...
...
@@ -63,9 +62,8 @@ public class VerifySignFilter extends AbstractFilter {
}
}
chain
.
doFilter
(
request
,
response
);
}
catch
(
SignatureException
ex
)
{
LogUtil
.
error
(
LOGGER
,
ex
,
"sign response error. response="
+
response
.
getResponse
());
}
catch
(
GatewayException
ex
)
{
LogUtil
.
error
(
LOGGER
,
ex
,
"sign response error. response="
+
response
.
getResponse
());
response
.
clearAttributes
();
response
.
setCode
(
ex
.
getResultCode
().
getCode
());
response
.
setMsg
(
ex
.
getResultCode
().
getMsg
());
...
...
@@ -73,11 +71,6 @@ public class VerifySignFilter extends AbstractFilter {
if
(
ex
instanceof
GatewayException
)
{
throw
(
GatewayException
)
ex
;
}
LogUtil
.
error
(
LOGGER
,
ex
,
"signatureFilter doFilter error. response="
+
response
.
getResponse
());
response
.
clearAttributes
();
response
.
setCode
(
GatewayResultCode
.
UNKNOWN_EXCEPTION
.
getCode
());
response
.
setMsg
(
GatewayResultCode
.
UNKNOWN_EXCEPTION
.
getMsg
());
}
}
...
...
jz-dm-apigateway/src/main/java/com/jz/dm/gateway/DefaultOpenApiDispatcher.java
View file @
d1f3e7bf
...
...
@@ -85,8 +85,8 @@ public class DefaultOpenApiDispatcher implements OpenApiDispatcher {
return
JSON
.
toJSONString
(
response
.
getAttributes
());
}
if
(
StringUtil
.
isEmpty
(
response
.
getCode
()))
{
response
.
setCode
(
OpenApiResultCode
.
UNKNOWN
_EXCEPTION
.
getCode
());
response
.
setMsg
(
OpenApiResultCode
.
UNKNOWN
_EXCEPTION
.
getMsg
());
response
.
setCode
(
OpenApiResultCode
.
REQUEST_DATA
_EXCEPTION
.
getCode
());
response
.
setMsg
(
OpenApiResultCode
.
REQUEST_DATA
_EXCEPTION
.
getMsg
());
}
return
JSON
.
toJSONString
(
response
.
getAttributes
());
}
...
...
jz-dm-apigateway/src/main/java/com/jz/dm/models/domian/ApiInterface.java
View file @
d1f3e7bf
...
...
@@ -149,4 +149,15 @@ public class ApiInterface extends BaseObject implements Serializable {
@TableField
(
exist
=
false
)
private
String
respCode
;
/*---------------------------------日志查询--------------------------------*/
/**
* 日志id
* */
@TableField
(
exist
=
false
)
private
Long
logId
;
/**
* 是否测试
* */
@TableField
(
exist
=
false
)
private
Boolean
isTest
;
}
jz-dm-apigateway/src/main/java/com/jz/dm/models/domian/ApiInterfaceCustom.java
View file @
d1f3e7bf
...
...
@@ -105,7 +105,4 @@ public class ApiInterfaceCustom extends BaseObject implements Serializable {
@TableField
(
"page_row"
)
private
Long
pageRow
;
}
jz-dm-apigateway/src/main/java/com/jz/dm/models/domian/ApiReqLog.java
View file @
d1f3e7bf
...
...
@@ -88,13 +88,17 @@ public class ApiReqLog implements Serializable {
*/
@TableField
(
"request_token"
)
private
String
requestToken
;
/**
* 处理状态 默认为0 未处理
*/
@TableField
(
"handler_status"
)
private
String
handlerStatus
;
/**
* 请求总耗时
*/
@ApiModelProperty
(
"请求总耗时"
)
@TableField
(
"request_consuming"
)
private
Double
requestConsuming
;
private
String
requestConsuming
;
/**
* 请求开始时间
*/
...
...
jz-dm-apigateway/src/main/java/com/jz/dm/service/ApiLogService.java
View file @
d1f3e7bf
package
com
.
jz
.
dm
.
service
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.jz.common.bean.PageInfoResponse
;
import
com.jz.common.utils.Result
;
import
com.jz.dm.models.domian.ApiReqLog
;
import
com.jz.dm.models.dto.DataBankNumberErrorDto
;
import
com.jz.dm.models.req.DataBankNumberErrorReq
;
import
com.jz.dm.models.req.LogInfoDetailReq
;
import
com.jz.dm.models.req.LogInfoListReq
;
import
net.sf.json.JSONObject
;
import
java.util.List
;
/**
* @author ZC
...
...
@@ -45,9 +41,9 @@ public interface ApiLogService {
/**
* 根据id更新日志
* @param id
* @param
jsonObject
* @param
response
*/
void
updateLog
(
Long
id
,
JSONObject
jsonObject
);
void
updateLog
(
Long
id
,
String
response
);
/**
* 统计API调用数据
...
...
@@ -63,4 +59,10 @@ public interface ApiLogService {
*/
Result
<
DataBankNumberErrorDto
>
queryNumberAndError
(
DataBankNumberErrorReq
req
);
/**
* 根据apikey查询日志信息
* @param apiKey
* @return
*/
Long
getReqLogging
(
String
apiKey
);
}
jz-dm-apigateway/src/main/java/com/jz/dm/service/impl/ApiLogServiceImpl.java
View file @
d1f3e7bf
package
com
.
jz
.
dm
.
service
.
impl
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
...
...
@@ -16,12 +15,12 @@ import com.jz.dm.models.req.LogInfoDetailReq;
import
com.jz.dm.models.req.LogInfoListReq
;
import
com.jz.dm.service.ApiLogService
;
import
lombok.extern.slf4j.Slf4j
;
import
net.sf.json.JSONArray
;
import
net.sf.json.JSONObject
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
javax.annotation.Resource
;
import
java.text.SimpleDateFormat
;
...
...
@@ -46,8 +45,10 @@ public class ApiLogServiceImpl implements ApiLogService {
// 加锁
@Autowired
private
ReentrantRedisLock
lock
;
/**
* 日志信息列表
*
* @param req
* @return
*/
...
...
@@ -55,26 +56,26 @@ public class ApiLogServiceImpl implements ApiLogService {
public
IPage
<
ApiReqLog
>
listApiLog
(
LogInfoListReq
req
)
{
IPage
<
ApiReqLog
>
page
=
new
Page
<>(
req
.
getPageNum
(),
req
.
getPageSize
());
QueryWrapper
<
ApiReqLog
>
query
=
new
QueryWrapper
<>();
if
(
StringUtils
.
isNotBlank
(
req
.
getApiKey
())){
query
.
eq
(
"api_key"
,
req
.
getApiKey
());
if
(
StringUtils
.
isNotBlank
(
req
.
getApiKey
()))
{
query
.
eq
(
"api_key"
,
req
.
getApiKey
());
}
if
(
StringUtils
.
isNotBlank
(
req
.
getStatus
())){
query
.
eq
(
"status"
,
req
.
getStatus
());
if
(
StringUtils
.
isNotBlank
(
req
.
getStatus
()))
{
query
.
eq
(
"status"
,
req
.
getStatus
());
}
if
(
StringUtils
.
isNotBlank
(
req
.
getRequestToken
())){
query
.
eq
(
"request_token"
,
req
.
getRequestToken
());
if
(
StringUtils
.
isNotBlank
(
req
.
getRequestToken
()))
{
query
.
eq
(
"request_token"
,
req
.
getRequestToken
());
}
if
(
StringUtils
.
isNotBlank
(
req
.
getCreateDate
())){
if
(
StringUtils
.
isNotBlank
(
req
.
getCreateDate
()))
{
String
startTime
=
req
.
getCreateDate
().
substring
(
0
,
10
)
+
" 00:00:00"
;
String
endTime
=
req
.
getCreateDate
().
substring
(
11
,
21
)
+
" 23:59:59"
;
query
.
between
(
"create_date"
,
startTime
,
endTime
);
query
.
between
(
"create_date"
,
startTime
,
endTime
);
}
query
.
eq
(
"is_deleted"
,
0
);
query
.
eq
(
"is_deleted"
,
0
);
query
.
orderByDesc
(
"create_date"
);
IPage
<
ApiReqLog
>
apiReqLogIPage
=
apiReqLogMapper
.
selectPage
(
page
,
query
);
// 数据银行-历史查询返回参数
if
(
req
.
getHistoryQuery
().
equals
(
"01"
)
&&
req
.
getHistoryQuery
()
!=
null
){
if
(
req
.
getHistoryQuery
().
equals
(
"01"
)
&&
req
.
getHistoryQuery
()
!=
null
)
{
for
(
ApiReqLog
record
:
apiReqLogIPage
.
getRecords
())
{
DataBankNumberErrorReq
errorReq
=
new
DataBankNumberErrorReq
();
List
<
Map
<
String
,
String
>>
reqList
=
new
ArrayList
<>();
...
...
@@ -97,6 +98,7 @@ public class ApiLogServiceImpl implements ApiLogService {
/**
* 查询日志详情
*
* @param req
* @return
*/
...
...
@@ -107,27 +109,30 @@ public class ApiLogServiceImpl implements ApiLogService {
/**
* 保存日志
*
* @param reqLog
*/
@Override
public
void
insetLogInfo
(
ApiReqLog
reqLog
)
{
apiReqLogMapper
.
insert
(
reqLog
);
}
/**
* api计量统计
*
* @param date
* @return
*/
@Override
public
Result
countAPiCallStat
(
String
date
)
{
Date
dateParam
=
null
;
public
Result
countAPiCallStat
(
String
date
)
{
Date
dateParam
=
null
;
try
{
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"YYYY-MM"
);
dateParam
=
dateFormat
.
parse
(
date
);
}
catch
(
Exception
ex
)
{
log
.
error
(
"时间转换异常:{}"
,
ex
.
getMessage
());
}
catch
(
Exception
ex
)
{
log
.
error
(
"时间转换异常:{}"
,
ex
.
getMessage
());
}
return
Result
.
of_success
(
apiReqLogMapper
.
countApiCallMonthData
(
dateParam
));
return
Result
.
of_success
(
apiReqLogMapper
.
countApiCallMonthData
(
dateParam
));
}
/**
...
...
@@ -150,43 +155,70 @@ public class ApiLogServiceImpl implements ApiLogService {
}
/**
* 根据id更新日志
*
* @param id
* @param
jsonObject
* @param
response
*/
@Override
public
void
updateLog
(
Long
id
,
JSONObject
jsonObject
)
{
public
void
updateLog
(
Long
id
,
String
response
)
{
com
.
alibaba
.
fastjson
.
JSONObject
jsonObject
=
null
;
if
(
StringUtils
.
isNotBlank
(
response
))
{
jsonObject
=
com
.
alibaba
.
fastjson
.
JSONObject
.
parseObject
(
response
);
}
try
{
/*ApiReqLog apiReqLog = apiReqLogMapper.maxId(id);*/
ApiReqLog
apiReqLog
=
apiReqLogMapper
.
selectById
(
id
);
if
(
null
!=
apiReqLog
){
if
(
null
!=
apiReqLog
)
{
UpdateWrapper
<
ApiReqLog
>
update
=
new
UpdateWrapper
<>();
if
(
200
==
jsonObject
.
getInt
(
"code"
)){
update
.
set
(
"status"
,
GeneralStatusTypeEnum
.
SUCCEED
);
}
else
{
update
.
set
(
"status"
,
GeneralStatusTypeEnum
.
FAIL
);
}
update
.
set
(
"response_params"
,
jsonObject
.
toString
());
update
.
set
(
"update_date"
,
new
Date
());
update
.
set
(
"request_end_time"
,
new
Date
());
if
(
null
!=
response
){
if
(
jsonObject
.
getString
(
"return_code"
).
equals
(
"ESC00000"
)
&&
jsonObject
.
getString
(
"return_message"
).
equals
(
"SUCCESS"
))
{
update
.
set
(
"status"
,
GeneralStatusTypeEnum
.
SUCCEED
);
}
else
{
update
.
set
(
"status"
,
GeneralStatusTypeEnum
.
FAIL
);
}
}
else
{
update
.
set
(
"status"
,
GeneralStatusTypeEnum
.
SUCCEED
);
}
update
.
set
(
"response_params"
,
response
);
update
.
set
(
"update_date"
,
new
Date
());
update
.
set
(
"request_end_time"
,
new
Date
());
update
.
set
(
"handler_status"
,
"1"
);
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
apiReqLog
.
getRequestStartTime
());
Long
time
=
System
.
currentTimeMillis
()
-
calendar
.
getTimeInMillis
()
/
1000
;
double
timeConsuming
=
time
.
doubleValue
();
update
.
set
(
"request_consuming"
,
timeConsuming
);
update
.
eq
(
"id"
,
id
);
if
(
apiReqLogMapper
.
update
(
null
,
update
)
==
0
){
Long
time
=
(
System
.
currentTimeMillis
()
-
calendar
.
getTimeInMillis
());
update
.
set
(
"request_consuming"
,
time
.
toString
()
+
"ms"
);
update
.
eq
(
"id"
,
id
);
if
(
apiReqLogMapper
.
update
(
null
,
update
)
==
0
)
{
log
.
info
(
"~~~~~~~~~~~更新日志信息失败~~~~~~~~"
);
}
}
else
{
log
.
info
(
"id为:{}"
,
id
+
"--------------日志信息不存在"
);
}
else
{
log
.
info
(
"id为:{}"
,
id
+
"--------------日志信息不存在"
);
}
}
catch
(
Exception
ex
)
{
log
.
error
(
"更新日志返回信息异常:{}"
,
ex
.
getMessage
());
}
catch
(
Exception
ex
)
{
log
.
error
(
"更新日志返回信息异常:{}"
,
ex
.
getMessage
());
}
}
/**
* 根据apiKey查询日志
*
* @param apiKey
* @return
*/
@Override
public
Long
getReqLogging
(
String
apiKey
)
{
QueryWrapper
<
ApiReqLog
>
queryWra
=
new
QueryWrapper
<>();
queryWra
.
select
(
"id"
);
queryWra
.
eq
(
"api_key"
,
apiKey
);
queryWra
.
eq
(
"handler_status"
,
0
);
queryWra
.
isNull
(
"status"
);
List
<
ApiReqLog
>
apiReqLogs
=
apiReqLogMapper
.
selectList
(
queryWra
);
if
(!
CollectionUtils
.
isEmpty
(
apiReqLogs
))
{
return
apiReqLogs
.
get
(
apiReqLogs
.
size
()
-
1
).
getId
();
}
return
null
;
}
}
jz-dm-apigateway/src/main/java/com/jz/dm/service/request/ApiQueryService.java
View file @
d1f3e7bf
This diff is collapsed.
Click to expand it.
jz-dm-apigateway/src/main/java/com/jz/dm/service/request/ApiQueryTestService.java
View file @
d1f3e7bf
This diff is collapsed.
Click to expand it.
jz-dm-apigateway/src/main/java/com/jz/dm/web/aspect/SystemLogAspect.java
View file @
d1f3e7bf
package
com
.
jz
.
dm
.
web
.
aspect
;
import
com.jz.common.utils.IpUtils
;
import
com.jz.common.utils.JsonUtils
;
import
com.jz.common.utils.UrlUtil
;
...
...
@@ -17,10 +16,8 @@ import lombok.extern.slf4j.Slf4j;
import
net.sf.json.JSONObject
;
import
org.apache.commons.lang3.StringUtils
;
import
org.aspectj.lang.JoinPoint
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.annotation.AfterReturning
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Before
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.context.request.RequestContextHolder
;
...
...
@@ -54,25 +51,26 @@ public class SystemLogAspect {
@Resource
private
ApiReqLogMapper
apiReqLogMapper
;
/*
//前置通知切入点
//前置通知切入点
@Pointcut
(
"@annotation(com.jz.dm.web.annotation.ApiLogAspect)"
)
public
void
beforeAspect
()
{
}
*/
}
//最终通知切入点
@Pointcut
(
"@annotation(com.jz.dm.web.annotation.ApiLogAspect)"
)
/*
@Pointcut("@annotation(com.jz.dm.web.annotation.ApiLogAspect)")
public void lastAspect() {
}
}
*/
//环绕通知切入点
@Pointcut
(
"@annotation(com.jz.dm.web.annotation.ApiLogAspect)"
)
/*
@Pointcut("@annotation(com.jz.dm.web.annotation.ApiLogAspect)")
public void aroundAspect() {
}
}
*/
@Around
(
"aroundAspect()"
)
/*
@Around("aroundAspect()")
public void doAround(ProceedingJoinPoint joinPoint) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
String ip = IpUtils.getIpAddr(request);
//获取用户请求方法的参数并序列化为JSON格式字符串
String params = "";
...
...
@@ -103,11 +101,9 @@ public class SystemLogAspect {
reqLog.setRequestIp(ip);
reqLog.setApiKey(jsonObject.getString("apiKey"));
reqLog.setRequestParams(params);
reqLog
.
setResponseParams
(
""
);
//响应参数
reqLog.setRequestUrl(url);
reqLog.setRequestMethod(contextPath);
reqLog.setEncryMode(jsonObject.getString("signType")); //加密方式:MD5,RSA
//reqLog.setEncryMode("MD5"); //加密方式暂时写死MD5
reqLog.setTransMode(request.getMethod());//传输方式 GET POST
reqLog.setRequestToken(jsonParamsList.getString("authCode"));
reqLog.setRequestStartTime(new Date());
...
...
@@ -116,10 +112,12 @@ public class SystemLogAspect {
if (null != reqLog) {
apiReqLogMapper.insert(reqLog);
}
/* Object result = joinPoint.proceed(joinPoint.getArgs());
Object proceed = joinPoint.proceed();
System.out.println("proceed"+proceed);
Object result = joinPoint.proceed(joinPoint.getArgs());
jsonResult = JSONObject.fromObject(result);
log.info("around响应结果为{}", jsonResult);
apiLogService.updateLog(reqLog.getId(), jsonResult);
*/
apiLogService.updateLog(reqLog.getId(), jsonResult);
} catch (GatewayException ex) {
log.info("切面处理保存异常信息:{}", ex.getMessage());
apiLogService.updateLog(reqLog.getId(), jsonResult);
...
...
@@ -127,10 +125,9 @@ public class SystemLogAspect {
throwable.printStackTrace();
}
}
}
/*
@Before("beforeAspect()")
}
*/
@Before
(
"beforeAspect()"
)
public
void
doBefore
(
JoinPoint
joinPoint
)
{
//日志信息收集切面
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
String
ip
=
IpUtils
.
getIpAddr
(
request
);
//获取用户请求方法的参数并序列化为JSON格式字符串
...
...
@@ -140,47 +137,55 @@ public class SystemLogAspect {
params
+=
JsonUtils
.
objectToJson
(
joinPoint
.
getArgs
()[
i
])
+
";"
;
}
}
if
(
StringUtils
.
isNotBlank
(
params
))
{
params
=
params
.
substring
(
0
,
params
.
length
()
-
1
).
split
(
";"
)[
0
];
}
//获取请求路径
String
url
=
UrlUtil
.
getServerUrl
(
request
);
// 访问项目名
String
contextPath
=
request
.
getContextPath
();
//JSONObject jsonObject = JSONObject.parseObject(params);
//String param = jsonObject.getString("params");
//JSONObject object = JSONObject.parseObject(param);
//String token = object.getString("token");
try {
log.info("~~~~~~~~~~~~~~~~~~~~~~~前置通知记录请求信息~~~~~~~~~~~~~~~~");
ApiReqLog reqLog = new ApiReqLog();
reqLog.setRequestIp(ip);
// reqLog.setApiKey(jsonObject.getString("apiKey"));
reqLog.setRequestParams(params);
reqLog.setResponseParams("");//响应参数
reqLog.setRequestUrl(url);
reqLog.setRequestMethod(contextPath);
reqLog.setEncryMode(SignType.MD5.name()); //加密方式:MD5,RSA
reqLog.setTransMode(request.getMethod());//传输方式 GET POST
// reqLog.setRequestToken(token);
reqLog.setRequestTime(new Date());
reqLog.setRemark(getServiceMethodDescription(joinPoint));
System.out.println(reqLog);
if (null != reqLog) {
apiLogService.insetLogInfo(reqLog);
log
.
info
(
"around请求参数为{}"
,
params
);
//动态修改其参数
//注意,如果调用joinPoint.proceed()方法,则修改的参数值不会生效,必须调用joinPoint.proceed(Object[] args)
com
.
alibaba
.
fastjson
.
JSONObject
jsonObject
=
com
.
alibaba
.
fastjson
.
JSONObject
.
parseObject
(
params
);
String
paramsList
=
jsonObject
.
getString
(
"openApiParams"
);
com
.
alibaba
.
fastjson
.
JSONObject
jsonParamsList
=
com
.
alibaba
.
fastjson
.
JSONObject
.
parseObject
(
paramsList
);
ApiReqLog
reqLog
=
new
ApiReqLog
();
JSONObject
jsonResult
=
null
;
Boolean
isTest
=
jsonParamsList
.
getBoolean
(
"isTest"
);
//不保存测试数据
if
(!
isTest
)
{
try
{
reqLog
.
setRequestIp
(
ip
);
reqLog
.
setApiKey
(
jsonObject
.
getString
(
"apiKey"
));
reqLog
.
setRequestParams
(
params
);
reqLog
.
setRequestUrl
(
url
);
reqLog
.
setEncryMode
(
"MD5"
);
reqLog
.
setTransMode
(
request
.
getMethod
());
reqLog
.
setRequestToken
(
jsonParamsList
.
getString
(
"authCode"
));
reqLog
.
setRequestStartTime
(
new
Date
());
reqLog
.
setRemark
(
getServiceMethodDescription
(
joinPoint
));
log
.
info
(
"请求参数:"
,
reqLog
);
if
(
null
!=
reqLog
)
{
apiReqLogMapper
.
insert
(
reqLog
);
}
}
catch
(
GatewayException
ex
)
{
log
.
error
(
"切面处理保存异常信息:{}"
,
ex
.
getMessage
());
/* apiLogService.updateLog(reqLog.getId(), jsonResult);*/
}
catch
(
Throwable
throwable
)
{
throwable
.
printStackTrace
();
}
} catch (Exception e) {
log.error("~~~~~~~~~~~~~~~~~~~~~~~前置通知异常~~~~~~~~~~~~~~~~~~~~~~~");
log.error("异常信息{}", e.getMessage());
}
}
*/
/**
}
/* */
/**
* 返回异常通知,返回抛出异常的时候执行的通知,可以获得返回的异常
* 可以访问到异常对象,且可以指定在出现特定异常的时候再执行通知代码
*/
*/
/*
@AfterReturning(value = "lastAspect()", returning = "result")
public void afterReturn(JoinPoint joinPoint, Object result) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.getRequest();
log
.
info
(
"~~~~~~~~~~~~~~~~~~~~~~最终通知执行~~~~~~~~~~~~~~~~~~~~~~~~"
);
String classType = joinPoint.getTarget().getClass().getName();
try {
Class<?> clazz = Class.forName(classType);
...
...
@@ -199,8 +204,8 @@ public class SystemLogAspect {
JSONObject jsonObject = JSONObject.fromObject(args[1]);
Map mapResult = (Map) jsonObject;
//将返回的result参数取出
/* Map<String, Object> res = (Map<String, Object>) mapResult.get("data
");
Integer id = (Integer) res.get("id");
*/
Map<String, Object> res = (Map<String, Object>) mapResult.get("attributes
");
Integer id = (Integer) res.get("id");
JSONObject data = jsonObject.getJSONObject("attributes");
log.info("最终通知得到结果:{}",jsonObject);
// apiLogService.updateLog(reqLog.getId(), jsonResult);
...
...
@@ -210,7 +215,7 @@ public class SystemLogAspect {
log.error("异常信息{}", e.getMessage());
}
}
}
*/
/**
* 获取注解中对方法的描述信息 用于service层注解
...
...
jz-dm-common/src/main/java/com/jz/common/utils/UrlUtil.java
View file @
d1f3e7bf
...
...
@@ -24,12 +24,14 @@ public class UrlUtil {
int
port
=
request
.
getServerPort
();
// 访问项目名
String
contextPath
=
request
.
getContextPath
();
String
url
=
"%s://%s%s%s"
;
//接口路径
String
requestURI
=
request
.
getRequestURI
();
String
url
=
"%s://%s%s%s%s"
;
String
portStr
=
""
;
if
(
port
!=
80
)
{
portStr
+=
":"
+
port
;
}
return
String
.
format
(
url
,
agreement
,
serverName
,
portStr
,
contextPath
);
return
String
.
format
(
url
,
agreement
,
serverName
,
portStr
,
contextPath
,
requestURI
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment