Доступ к данным публикации DWR в Spring Interceptor
Вопрос
У меня есть действие DWR со следующей сигнатурой метода:
String joinGroup(String groupId, String groupName);
Это вызывается через запрос DWR AJAX и работает нормально.
Однако я пытаюсь написать перехватчик Spring (работает так же, как ServletFilter), чтобы выполнить некоторую работу по аутентификации перед вызовом действия DWR.
Перехватчик вызывается правильно, но мне нужен доступ к данным groupId и groupName в перехватчике.
Карта параметров запроса пуста, и я просмотрел весь список атрибутов запроса в отладчике и нигде не вижу данных.
PostData запроса также имеет значение null.
Используя Firebug, я вижу, что данные передаются на сервер (и они там, когда в конечном итоге вызывается метод joinGroup).
Я просто не могу получить к нему доступ в своем перехватчике.
Есть ли способ вообще получить к нему доступ?
Решение
Используйте org.directwebremoting.AjaxFilter.
Метод doFilter AjaxFilter вызывается DWR каждый раз, когда делается запрос Ajax к методу, для которого настроен этот фильтр.AjaxFilterChain, переданный в этот метод, позволяет фильтру передавать сведения о методе следующему объекту в цепочке.
Обычно этот метод выполняет следующее:
- Изучите запрос
- При желании измените метод, объект или параметры.
- Либо вызовите следующую сущность в цепочке с помощью AjaxFilterChain, либо решите вместо этого предпринять какое-то другое действие.
- При необходимости измените значение, возвращаемое пользователю.
- Выполните какое-нибудь другое действие (например.Ведение журнала)
Другие советы
Я предполагаю, что вы используете МетодПерехватчик который вызывается (это означает, что ваша конфигурация правильна) только при использовании вышеуказанного метода.
...
@Override
public Object invoke(MethodInvocation inv) throws Thorwable {
Object[] args = inv.getArguments();
String groupId = args[0];
String groupName = args[1];
.... if user has access call inv.proceed, else throw AccessDeniedException
}
МетодПерехватчик в Spring Framework почти то же самое, что и МетодSecurityInterceptor в Spring Security.