Как перехватить пользовательское значение заголовка HTTP и сохранить его в WebSession Wicket? - PullRequest
0 голосов
/ 12 октября 2010

Мне нужно захватить определенное значение настраиваемого заголовка HTTP из каждого запроса и поместить его в WebSession, чтобы впоследствии оно было доступно на любой веб-странице.(Я считаю, что способ Wicket сделать это - создать собственный класс, расширяющий WebSession, который имеет соответствующие методы доступа.)

У меня вопрос: Какой тип фильтра (или другой механизм) мне нужен, чтобы иметь возможностьчтобы перехватить заголовок и получить доступ к WebSession для хранения значения?

Я пытался сделать это с помощью обычного фильтра Java EE, используя

CustomSession session = (CustomSession) AuthenticatedWebSession.get();

Но (возможно, это не удивительно), что дает:

java.lang.IllegalStateException: 
    you can only locate or create sessions in the context of a request cycle

Должен ли я, возможно, расширить WicketFilter и сделать это там (могу ли я получить доступ к сеансу в этот момент?), или требуется что-то еще более сложное?

конечно, укажите, если я делаю что-то совершенно не так;Я новичок в калитке.

1 Ответ

4 голосов
/ 12 октября 2010

Полагаю, вам нужно реализовать пользовательский WebRequestCycle:

public class CustomRequestCycle extends WebRequestCycle{

    public CustomRequestCycle(WebApplication application,
        WebRequest request,
        Response response){
        super(application, request, response);
        String headerValue = request.getHttpServletRequest().getHeader("foo");
        ((MyCustomSession)Session.get()).setFoo(headerValue);
    }

}

. И в своем классе WebApplication вы регистрируете пользовательский RequestCycle, как это::

...