У меня есть три разных модуля maven:
- security-api, который содержит аннотацию и аспект.
- модуль, скомпилированный с классами печи из «security-api».
- клиент, который вызывает через API аннотированный метод из «модуля».
Все будет работать внутри одной и той же JVM.
Из "модуля"
@Authorization
public String getString(Subject s) {
return "hello";
}
Аспект в "security-api"
@Aspect
public class AuthorizationAspect {
@Pointcut(""
+ "execution(* *(org.apache.shiro.subject.Subject, ..)) && "
+ "@annotation(com.company.Authorization) && "
+ "@this(c)")
public void cutAuthorize(Authorization c) { }
@Before("cutAuthorize(c)")
public void callFromAuthorizeBefore(Authorization c) {
System.out.println("> " + c);
}
}
Итак, что я хочу, так это то, что когда я вызываю getString(subject) из другого модуля, я хочу запустить cutAuthorize(). Я могу выполнить это, указав точку вызова, но это перехватывается только в том случае, если вызов происходит в том же модуле, т.е. если я вызываю аннотированный метод внутри «модуля», все в порядке, но поскольку я вызываю из другого метода через интерфейс, совет не проходит.
Кто-нибудь знает, какой pointcut я должен использовать, чтобы посоветовать какой-то код, когда он запускается, а не когда он вызывается? Я не знаю, понятно ли я выражаюсь, но то, что я пытаюсь сделать, немного сложно объяснить.
Заранее спасибо,
Руи