Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
前端资源
RuoYi-Vue
提交
5ccd9877
R
RuoYi-Vue
项目概览
前端资源
/
RuoYi-Vue
12 个月 前同步成功
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
RuoYi-Vue
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5ccd9877
编写于
9月 18, 2021
作者:
若
若依
提交者:
Gitee
9月 18, 2021
浏览文件
操作
浏览文件
下载
差异文件
!325 update 优化aop语法 使用spring自动注入注解 基于注解拦截的aop注解不可能为空
Merge pull request !325 from 疯狂的狮子Li/master
上级
7108ec41
8f7ed665
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
23 addition
and
141 deletion
+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
未找到文件。
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
浏览文件 @
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
)
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
浏览文件 @
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
());
}
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
浏览文件 @
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
浏览文件 @
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
());
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录