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