У меня есть три разных модуля 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 я должен использовать, чтобы рекомендовать некоторый код при его запуске, а не при его вызове? Я не знаю, ясно ли я проясняю, но то, что я пытаюсь сделать, немного сложно объяснить.
Заранее спасибо,
Руи