Как добавить аргументы в аспект Spring AOP - PullRequest
0 голосов
/ 16 сентября 2018

На языке 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 голосов
/ 04 октября 2018

Когда вы используете «&& args (role)», вы ищете параметры с именем «role» в целевом методе, а не в аннотации.

Вы можете попробовать изменить свой аспект на что-то вроде этого:

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