Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
ioc_sixiang_license
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
zengtianlai3
ioc_sixiang_license
Commits
c5b15e62
Commit
c5b15e62
authored
Aug 04, 2022
by
AfirSraftGarrier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
122deff1
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
39 additions
and
61 deletions
+39
-61
LogAspect.java
license/src/main/java/iot/sixiang/license/log/LogAspect.java
+39
-61
No files found.
license/src/main/java/iot/sixiang/license/log/LogAspect.java
View file @
c5b15e62
...
...
@@ -32,6 +32,7 @@ public class LogAspect {
@Pointcut
(
"@annotation(iot.sixiang.license.log.MyLog)"
)
public
void
logPointCut
()
{
log
.
info
(
"------>配置织入点"
);
}
/**
...
...
@@ -39,9 +40,9 @@ public class LogAspect {
*
* @param joinPoint 切点
*/
@AfterReturning
(
pointcut
=
"logPointCut()"
)
public
void
doAfterReturning
(
JoinPoint
joinPoint
)
{
handleLog
(
joinPoint
,
null
);
@AfterReturning
(
pointcut
=
"logPointCut()"
,
returning
=
"jsonResult"
)
public
void
doAfterReturning
(
JoinPoint
joinPoint
,
Object
jsonResult
)
{
handleLog
(
joinPoint
,
null
,
jsonResult
);
}
/**
...
...
@@ -52,43 +53,53 @@ public class LogAspect {
*/
@AfterThrowing
(
value
=
"logPointCut()"
,
throwing
=
"e"
)
public
void
doAfterThrowing
(
JoinPoint
joinPoint
,
Exception
e
)
{
handleLog
(
joinPoint
,
e
);
handleLog
(
joinPoint
,
e
,
null
);
}
pr
ivate
void
handleLog
(
final
JoinPoint
joinPoint
,
final
Exception
e
)
{
pr
otected
void
handleLog
(
final
JoinPoint
joinPoint
,
final
Exception
e
,
Object
jsonResult
)
{
// 获得
MyLog
注解
// 获得注解
MyLog
controllerLog
=
getAnnotationLog
(
joinPoint
);
if
(
controllerLog
==
null
)
{
return
;
}
SysOperLog
operLog
=
new
SysOperLog
();
// 操作状态(0正常 1异常)
operLog
.
setStatus
(
0
);
// 操作时间
operLog
.
setOperTime
(
new
Date
());
if
(
e
!=
null
)
{
operLog
.
setStatus
(
1
);
// IotLicenseException为本系统自定义的异常类,读者若要获取异常信息,请根据自身情况变通
operLog
.
setErrorMsg
(
StringUtils
.
substring
(((
IotLicenseException
)
e
).
getMsg
(),
0
,
2000
));
}
// UserUtils.getUri();获取方法上的路径 如:/login,本文实现方法如下:
// 1、在拦截器中 String uri = request.getRequestURI();
// 2、用ThreadLocal存放uri,UserUtils.setUri(uri);
// 3、UserUtils.getUri();
String
uri
=
UserUtils
.
getUri
();
operLog
.
setUri
(
uri
);
// 处理注解上的参数
// operLog.setMethod(className + "." + methodName + "()");
// 处理设置注解上的参数
getControllerMethodDescription
(
joinPoint
,
controllerLog
,
operLog
);
// 保存数据库
sysOperLogService
.
addOperlog
(
operLog
.
getTitle
(),
operLog
.
getBusinessType
(),
operLog
.
getUri
(),
operLog
.
getStatus
(),
operLog
.
getOptParam
(),
operLog
.
getErrorMsg
(),
operLog
.
getOperTime
());
}
/**
* 是否存在注解,如果存在就获取,不存在则返回null
* @param joinPoint
* @return
* 获取注解中对方法的描述信息 用于Controller层注解
*
* @param myLog 日志
* @param operLog 操作日志
* @throws Exception
*/
public
void
getControllerMethodDescription
(
JoinPoint
joinPoint
,
MyLog
myLog
,
SysOperLog
operLog
)
{
// 设置action动作
operLog
.
setBusinessType
(
myLog
.
businessType
().
ordinal
());
// 设置标题
operLog
.
setTitle
(
myLog
.
title
());
String
optParam
=
getAnnotationValue
(
joinPoint
,
myLog
.
optParam
());
operLog
.
setOptParam
(
optParam
);
}
/**
* 是否存在注解,如果存在就获取
*/
private
MyLog
getAnnotationLog
(
JoinPoint
joinPoint
)
{
Signature
signature
=
joinPoint
.
getSignature
();
...
...
@@ -100,36 +111,13 @@ public class LogAspect {
return
null
;
}
/**
* 获取Controller层上MyLog注解中对方法的描述信息
* @param joinPoint 切点
* @param myLog 自定义的注解
* @param operLog 操作日志实体类
*/
private
void
getControllerMethodDescription
(
JoinPoint
joinPoint
,
MyLog
myLog
,
SysOperLog
operLog
)
{
// 设置业务类型(0其它 1新增 2修改 3删除)
operLog
.
setBusinessType
(
myLog
.
businessType
().
ordinal
());
// 设置模块标题,eg:登录
operLog
.
setTitle
(
myLog
.
title
());
// 对方法上的参数进行处理,处理完:userName=xxx,password=xxx
String
optParam
=
getAnnotationValue
(
joinPoint
,
myLog
.
optParam
());
operLog
.
setOptParam
(
optParam
);
}
/**
* 对方法上的参数进行处理
* @param joinPoint
* @param name
* @return
*/
private
String
getAnnotationValue
(
JoinPoint
joinPoint
,
String
name
)
{
public
String
getAnnotationValue
(
JoinPoint
joinPoint
,
String
name
)
{
String
paramName
=
name
;
// 获取方法中所有的参数
Map
<
String
,
Object
>
params
=
getParams
(
joinPoint
);
// 参数是否是动态的:#{paramName}
if
(
paramName
.
matches
(
"^#\\{\\D*\\}"
))
{
// 获取参数名
,去掉#{ }
// 获取参数名
paramName
=
paramName
.
replace
(
"#{"
,
""
).
replace
(
"}"
,
""
);
// 是否是复杂的参数类型:对象.参数名
if
(
paramName
.
contains
(
"."
))
{
...
...
@@ -140,39 +128,35 @@ public class LogAspect {
JSONObject
jsonObject
=
(
JSONObject
)
JSONObject
.
toJSON
(
object
);
// 获取值
Object
o
=
jsonObject
.
get
(
split
[
1
]);
return
String
.
valueOf
(
o
);
}
else
{
// 简单的动态参数直接返回
StringBuilder
str
=
new
StringBuilder
();
String
[]
paraNames
=
paramName
.
split
(
","
);
for
(
String
paraName
:
paraNames
)
{
for
(
int
i
=
0
;
i
<
paraNames
.
length
;
i
++
)
{
String
paraName
=
paraNames
[
i
];
String
val
=
String
.
valueOf
(
getValue
(
params
,
paraName
));
// 组装成 userName=xxx,password=xxx,
str
.
append
(
paraName
).
append
(
"="
).
append
(
val
).
append
(
","
);
str
.
append
(
paraName
+
"="
+
val
+
","
);
}
// 去掉末尾的,
if
(
str
.
toString
().
endsWith
(
","
))
{
String
substring
=
str
.
substring
(
0
,
str
.
length
()
-
1
);
return
substring
;
}
else
{
return
str
.
toString
();
}
}
}
// 非动态参数直接返回
return
name
;
}
/**
* 获取方法上的所有参数,返回Map类型, eg: 键:"userName",值:xxx 键:"password",值:xxx
* @param joinPoint
* @return
*/
public
Map
<
String
,
Object
>
getParams
(
JoinPoint
joinPoint
)
{
Map
<
String
,
Object
>
params
=
new
HashMap
<>(
8
);
// 通过切点获取方法所有参数值["zhangsan", "123456"]
Object
[]
args
=
joinPoint
.
getArgs
();
// 通过切点获取方法所有参数名 eg:["userName", "password"]
MethodSignature
signature
=
(
MethodSignature
)
joinPoint
.
getSignature
();
String
[]
names
=
signature
.
getParameterNames
();
for
(
int
i
=
0
;
i
<
args
.
length
;
i
++)
{
...
...
@@ -181,13 +165,7 @@ public class LogAspect {
return
params
;
}
/**
* 从map中获取键为paramName的值,不存在放回null
* @param map
* @param paramName
* @return
*/
private
Object
getValue
(
Map
<
String
,
Object
>
map
,
String
paramName
)
{
public
Object
getValue
(
Map
<
String
,
Object
>
map
,
String
paramName
)
{
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
map
.
entrySet
())
{
if
(
entry
.
getKey
().
equals
(
paramName
))
{
return
entry
.
getValue
();
...
...
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