Совет, когда метод вызывается из другого модуля - PullRequest
0 голосов
/ 27 мая 2011

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

Заранее спасибо,

Руи

1 Ответ

1 голос
/ 27 мая 2011

Вам необходимо зарегистрировать модель безопасности как библиотеку аспектов для компилятора aspectj, это должно быть все.

...