Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
finance-manage
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
finance-oa
finance-manage
Commits
5ccd9877
Commit
5ccd9877
authored
Sep 18, 2021
by
若依
Committed by
Gitee
Sep 18, 2021
Browse files
Options
Browse Files
Download
Plain Diff
!325 update 优化aop语法 使用spring自动注入注解 基于注解拦截的aop注解不可能为空
Merge pull request !325 from 疯狂的狮子Li/master
parents
7108ec41
8f7ed665
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
23 additions
and
141 deletions
+23
-141
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
...ain/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
+4
-36
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
...in/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
+3
-33
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
.../src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
+14
-47
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java
...n/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java
+2
-25
No files found.
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
View file @
5ccd9877
package
com.ruoyi.framework.aspectj
;
import
java.lang.reflect.Method
;
import
org.aspectj.lang.JoinPoint
;
import
org.aspectj.lang.Signature
;
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.stereotype.Component
;
import
com.ruoyi.common.annotation.DataScope
;
import
com.ruoyi.common.core.domain.BaseEntity
;
...
...
@@ -55,27 +51,15 @@ public class DataScopeAspect
*/
public
static
final
String
DATA_SCOPE
=
"dataScope"
;
// 配置织入点
@Pointcut
(
"@annotation(com.ruoyi.common.annotation.DataScope)"
)
public
void
dataScopePointCut
()
{
}
@Before
(
"dataScopePointCut()"
)
public
void
doBefore
(
JoinPoint
point
)
throws
Throwable
@Before
(
"@annotation(controllerDataScope)"
)
public
void
doBefore
(
JoinPoint
point
,
DataScope
controllerDataScope
)
throws
Throwable
{
clearDataScope
(
point
);
handleDataScope
(
point
);
handleDataScope
(
point
,
controllerDataScope
);
}
protected
void
handleDataScope
(
final
JoinPoint
joinPoint
)
{
// 获得注解
DataScope
controllerDataScope
=
getAnnotationLog
(
joinPoint
);
if
(
controllerDataScope
==
null
)
protected
void
handleDataScope
(
final
JoinPoint
joinPoint
,
DataScope
controllerDataScope
)
{
return
;
}
// 获取当前的用户
LoginUser
loginUser
=
SecurityUtils
.
getLoginUser
();
if
(
StringUtils
.
isNotNull
(
loginUser
))
...
...
@@ -150,22 +134,6 @@ public class DataScopeAspect
}
}
/**
* 是否存在注解,如果存在就获取
*/
private
DataScope
getAnnotationLog
(
JoinPoint
joinPoint
)
{
Signature
signature
=
joinPoint
.
getSignature
();
MethodSignature
methodSignature
=
(
MethodSignature
)
signature
;
Method
method
=
methodSignature
.
getMethod
();
if
(
method
!=
null
)
{
return
method
.
getAnnotation
(
DataScope
.
class
);
}
return
null
;
}
/**
* 拼接权限sql前先清空params.dataScope参数防止注入
*/
...
...
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
View file @
5ccd9877
package
com.ruoyi.framework.aspectj
;
import
java.util.Objects
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.aspectj.lang.reflect.MethodSignature
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.core.annotation.AnnotationUtils
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.stereotype.Component
;
import
com.ruoyi.common.annotation.DataSource
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.framework.datasource.DynamicDataSourceContextHolder
;
/**
...
...
@@ -27,22 +22,11 @@ public class DataSourceAspect
{
protected
Logger
logger
=
LoggerFactory
.
getLogger
(
getClass
());
@Pointcut
(
"@annotation(com.ruoyi.common.annotation.DataSource)"
+
"|| @within(com.ruoyi.common.annotation.DataSource)"
)
public
void
dsPointCut
()
@Around
(
"@annotation(dataSource) || @within(dataSource)"
)
public
Object
around
(
ProceedingJoinPoint
point
,
DataSource
dataSource
)
throws
Throwable
{
}
@Around
(
"dsPointCut()"
)
public
Object
around
(
ProceedingJoinPoint
point
)
throws
Throwable
{
DataSource
dataSource
=
getDataSource
(
point
);
if
(
StringUtils
.
isNotNull
(
dataSource
))
{
DynamicDataSourceContextHolder
.
setDataSourceType
(
dataSource
.
value
().
name
());
}
try
{
...
...
@@ -55,18 +39,4 @@ public class DataSourceAspect
}
}
/**
* 获取需要切换的数据源
*/
public
DataSource
getDataSource
(
ProceedingJoinPoint
point
)
{
MethodSignature
signature
=
(
MethodSignature
)
point
.
getSignature
();
DataSource
dataSource
=
AnnotationUtils
.
findAnnotation
(
signature
.
getMethod
(),
DataSource
.
class
);
if
(
Objects
.
nonNull
(
dataSource
))
{
return
dataSource
;
}
return
AnnotationUtils
.
findAnnotation
(
signature
.
getDeclaringType
(),
DataSource
.
class
);
}
}
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
View file @
5ccd9877
package
com.ruoyi.framework.aspectj
;
import
java.lang.reflect.Method
;
import
java.util.Collection
;
import
java.util.Iterator
;
import
java.util.Map
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
org.aspectj.lang.JoinPoint
;
import
org.aspectj.lang.Signature
;
import
org.aspectj.lang.annotation.AfterReturning
;
import
org.aspectj.lang.annotation.AfterThrowing
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.aspectj.lang.reflect.MethodSignature
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Component
;
...
...
@@ -43,21 +38,15 @@ public class LogAspect
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
LogAspect
.
class
);
// 配置织入点
@Pointcut
(
"@annotation(com.ruoyi.common.annotation.Log)"
)
public
void
logPointCut
()
{
}
/**
* 处理完请求后执行
*
* @param joinPoint 切点
*/
@AfterReturning
(
pointcut
=
"
logPointCut(
)"
,
returning
=
"jsonResult"
)
public
void
doAfterReturning
(
JoinPoint
joinPoint
,
Object
jsonResult
)
@AfterReturning
(
pointcut
=
"
@annotation(controllerLog
)"
,
returning
=
"jsonResult"
)
public
void
doAfterReturning
(
JoinPoint
joinPoint
,
Log
controllerLog
,
Object
jsonResult
)
{
handleLog
(
joinPoint
,
null
,
jsonResult
);
handleLog
(
joinPoint
,
controllerLog
,
null
,
jsonResult
);
}
/**
...
...
@@ -66,22 +55,16 @@ public class LogAspect
* @param joinPoint 切点
* @param e 异常
*/
@AfterThrowing
(
value
=
"
logPointCut(
)"
,
throwing
=
"e"
)
public
void
doAfterThrowing
(
JoinPoint
joinPoint
,
Exception
e
)
@AfterThrowing
(
value
=
"
@annotation(controllerLog
)"
,
throwing
=
"e"
)
public
void
doAfterThrowing
(
JoinPoint
joinPoint
,
Log
controllerLog
,
Exception
e
)
{
handleLog
(
joinPoint
,
e
,
null
);
handleLog
(
joinPoint
,
controllerLog
,
e
,
null
);
}
protected
void
handleLog
(
final
JoinPoint
joinPoint
,
final
Exception
e
,
Object
jsonResult
)
protected
void
handleLog
(
final
JoinPoint
joinPoint
,
Log
controllerLog
,
final
Exception
e
,
Object
jsonResult
)
{
try
{
// 获得注解
Log
controllerLog
=
getAnnotationLog
(
joinPoint
);
if
(
controllerLog
==
null
)
{
return
;
}
// 获取当前的用户
LoginUser
loginUser
=
SecurityUtils
.
getLoginUser
();
...
...
@@ -172,22 +155,6 @@ public class LogAspect
}
}
/**
* 是否存在注解,如果存在就获取
*/
private
Log
getAnnotationLog
(
JoinPoint
joinPoint
)
throws
Exception
{
Signature
signature
=
joinPoint
.
getSignature
();
MethodSignature
methodSignature
=
(
MethodSignature
)
signature
;
Method
method
=
methodSignature
.
getMethod
();
if
(
method
!=
null
)
{
return
method
.
getAnnotation
(
Log
.
class
);
}
return
null
;
}
/**
* 参数拼装
*/
...
...
@@ -196,11 +163,11 @@ public class LogAspect
String
params
=
""
;
if
(
paramsArray
!=
null
&&
paramsArray
.
length
>
0
)
{
for
(
int
i
=
0
;
i
<
paramsArray
.
length
;
i
++
)
for
(
Object
o
:
paramsArray
)
{
if
(
StringUtils
.
isNotNull
(
paramsArray
[
i
])
&&
!
isFilterObject
(
paramsArray
[
i
]
))
if
(
StringUtils
.
isNotNull
(
o
)
&&
!
isFilterObject
(
o
))
{
Object
jsonObj
=
JSON
.
toJSON
(
paramsArray
[
i
]
);
Object
jsonObj
=
JSON
.
toJSON
(
o
);
params
+=
jsonObj
.
toString
()
+
" "
;
}
}
...
...
@@ -225,17 +192,17 @@ public class LogAspect
else
if
(
Collection
.
class
.
isAssignableFrom
(
clazz
))
{
Collection
collection
=
(
Collection
)
o
;
for
(
Iterator
iter
=
collection
.
iterator
();
iter
.
hasNext
();
)
for
(
Object
value
:
collection
)
{
return
iter
.
next
()
instanceof
MultipartFile
;
return
value
instanceof
MultipartFile
;
}
}
else
if
(
Map
.
class
.
isAssignableFrom
(
clazz
))
{
Map
map
=
(
Map
)
o
;
for
(
Iterator
iter
=
map
.
entrySet
().
iterator
();
iter
.
hasNext
();
)
for
(
Object
value
:
map
.
entrySet
()
)
{
Map
.
Entry
entry
=
(
Map
.
Entry
)
iter
.
next
()
;
Map
.
Entry
entry
=
(
Map
.
Entry
)
value
;
return
entry
.
getValue
()
instanceof
MultipartFile
;
}
}
...
...
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java
View file @
5ccd9877
...
...
@@ -49,16 +49,9 @@ public class RateLimiterAspect
this
.
limitScript
=
limitScript
;
}
// 配置织入点
@Pointcut
(
"@annotation(com.ruoyi.common.annotation.RateLimiter)"
)
public
void
rateLimiterPointCut
()
@Before
(
"@annotation(rateLimiter)"
)
public
void
doBefore
(
JoinPoint
point
,
RateLimiter
rateLimiter
)
throws
Throwable
{
}
@Before
(
"rateLimiterPointCut()"
)
public
void
doBefore
(
JoinPoint
point
)
throws
Throwable
{
RateLimiter
rateLimiter
=
getAnnotationRateLimiter
(
point
);
String
key
=
rateLimiter
.
key
();
int
time
=
rateLimiter
.
time
();
int
count
=
rateLimiter
.
count
();
...
...
@@ -84,22 +77,6 @@ public class RateLimiterAspect
}
}
/**
* 是否存在注解,如果存在就获取
*/
private
RateLimiter
getAnnotationRateLimiter
(
JoinPoint
joinPoint
)
{
Signature
signature
=
joinPoint
.
getSignature
();
MethodSignature
methodSignature
=
(
MethodSignature
)
signature
;
Method
method
=
methodSignature
.
getMethod
();
if
(
method
!=
null
)
{
return
method
.
getAnnotation
(
RateLimiter
.
class
);
}
return
null
;
}
public
String
getCombineKey
(
RateLimiter
rateLimiter
,
JoinPoint
point
)
{
StringBuffer
stringBuffer
=
new
StringBuffer
(
rateLimiter
.
key
());
...
...
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