Получение аннотаций метода выполнения в перехватчике

#java #struts2 #actioncontext

#java #struts2 #actioncontext

Вопрос:

У меня есть некоторые действия, для доступа к которым требуется определенное разрешение пользователя, поэтому я создал аннотацию метода @RequiredPermission и перехватчик, чтобы проверить, имеет ли метод, который будет выполняться, аннотацию или нет, и если у него есть, проверьте, есть ли у зарегистрированного пользователя разрешение.

Проблема в том, что я не знаю, как получить эту информацию из ActionInvocation и ни из ActionContext.

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

Любой совет?

Ответ №1:

Необходимая информация содержится в ActionProxy , доступном через ActionInvocation.getProxy() .

Как только у вас есть прокси, у вас есть доступ к самому действию (из ActionInvocation ) и имени метода ( ActionProxy.getMethod() ) в виде строки.

С этого момента это обычное отражение Java.

 Method method = action.getClass().getDeclaredMethod(actionmethod);
RequiredPermission permission = method.getAnnotation(RequiredPermission.class);
if (sessionUser.inRoles(permission.getRoles()) {
    return invocation.invoke();
}

return Constants.LOGIN_REQUIRED_RESULT;
  

Или, как вы хотите, обрабатывать фактическую логику.

Комментарии:

1. Спасибо, чувак, я перепробовал почти все методы в ActionInvocation и ActionContext, но даже не думал о том, чтобы попробовать ActionProxy. Сработало отлично

2. @Guedes Круто! Да, это немного скрыто 😉 Однако это позволяет вам играть в некоторые забавные игры, подобные этой.