如何向 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
}