如何向Spring AOP方面添加参数

时间:2018-09-16 15:50:21

标签: aop aspectj spring-aop

在Kotlin语言中,我像这样配置了Spring AOP注释:

@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)

annotation class Authenticated(val roles: Array<String>)

...以及类似的方面类:

@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...
}

注释在没有参数的情况下也能很好地工作,即,注释方法被截获。但是带有“角色”的论点永远都不会被匹配,我也不知道为什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

当您使用“ && args(roles)”时,您正在目标方法中而不是在注释中查找名为“ roles”的参数。

您可以尝试将您的方面更改为类似以下内容:

@Around("@annotation(authenticated))
@Throws(Throwable::class)
fun authenticate(joinPoint: ProceedingJoinPoint, authenticated: Authenticated):Any? {
    val roles = authenticated.roles
    //.. do stuff
    return proceed
}