#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 Круто! Да, это немного скрыто 😉 Однако это позволяет вам играть в некоторые забавные игры, подобные этой.