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
8f7ed665
Commit
8f7ed665
authored
Sep 18, 2021
by
疯狂的狮子li
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update 优化aop语法 使用spring自动注入注解 基于注解拦截的aop注解不可能为空
parent
12ab8b03
Changes
4
Hide 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 @
8f7ed665
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
)
protected
void
handleDataScope
(
final
JoinPoint
joinPoint
,
DataScope
controllerDataScope
)
{
// 获得注解
DataScope
controllerDataScope
=
getAnnotationLog
(
joinPoint
);
if
(
controllerDataScope
==
null
)
{
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 @
8f7ed665
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
());
}
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 @
8f7ed665
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 @
8f7ed665
...
...
@@ -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