如何向 Spring AOP 方面添加参数
How to add arguments to Spring AOP aspect
在 Kotlin 语言中,我配置了一个 Spring AOP 注释,如下所示:
@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
annotation class Authenticated(val roles: Array<String>)
... 方面 class 是这样的:
@Aspect
@Component
class AuthenticationAspect {
@Around("@annotation(Authenticated) && args(roles)", argNames = "roles")
@Throws(Throwable::class)
fun authenticate(joinPoint: ProceedingJoinPoint, roles: Array<String>):Any? {
//.. do stuff
return proceed
}
}
在我的方法中,我添加了这样的注释:
@Authenticated(roles = ["read", "write"])
fun someMethod(msg: Pair) {
// do stuff...
}
注释在没有参数的情况下运行良好,即被注释的方法被拦截。但是对于参数 "roles" 它永远不会匹配,我不知道为什么。任何帮助将不胜感激。
当您使用“&& args(roles)”时,您是在目标方法中寻找名为 "roles" 的参数,而不是在注释中。
你可以试着把你的相位改成这样:
@Around("@annotation(authenticated))
@Throws(Throwable::class)
fun authenticate(joinPoint: ProceedingJoinPoint, authenticated: Authenticated):Any? {
val roles = authenticated.roles
//.. do stuff
return proceed
}
在 Kotlin 语言中,我配置了一个 Spring AOP 注释,如下所示:
@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
annotation class Authenticated(val roles: Array<String>)
... 方面 class 是这样的:
@Aspect
@Component
class AuthenticationAspect {
@Around("@annotation(Authenticated) && args(roles)", argNames = "roles")
@Throws(Throwable::class)
fun authenticate(joinPoint: ProceedingJoinPoint, roles: Array<String>):Any? {
//.. do stuff
return proceed
}
}
在我的方法中,我添加了这样的注释:
@Authenticated(roles = ["read", "write"])
fun someMethod(msg: Pair) {
// do stuff...
}
注释在没有参数的情况下运行良好,即被注释的方法被拦截。但是对于参数 "roles" 它永远不会匹配,我不知道为什么。任何帮助将不胜感激。
当您使用“&& args(roles)”时,您是在目标方法中寻找名为 "roles" 的参数,而不是在注释中。
你可以试着把你的相位改成这样:
@Around("@annotation(authenticated))
@Throws(Throwable::class)
fun authenticate(joinPoint: ProceedingJoinPoint, authenticated: Authenticated):Any? {
val roles = authenticated.roles
//.. do stuff
return proceed
}