Как да прихвана персонализирана HTTP заглавна стойност и да я съхраня в WebSession на Wicket?

Трябва да взема определена персонализирана 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 и да го направя там (мога ли да осъществя достъп до сесията в този момент?), Или е необходимо нещо още по-сложно?

Разбира се, моля, посочете го, ако правя нещо напълно погрешно; Нов съм в Wicket.


person Jonik    schedule 12.10.2010    source източник


Отговори (1)


Предполагам, че трябва да внедрите персонализиран 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 по този начин:

public class MyApp extends WebApplication{

    @Override
    public RequestCycle newRequestCycle(Request request, Response response){
        return new CustomRequestCycle(this, (WebRequest) request, response);
    }

}

Справка:

person Sean Patrick Floyd    schedule 12.10.2010
comment
Благодаря, успях да проработя с този подход! (Просто ми отне известно време, за да проверя това с Tamper Data...) Използването на персонализиран WebRequestCycle всъщност е доста просто и чисто, нищо толкова сложно, колкото си мислех. - person Jonik; 12.10.2010
comment
wicket има просто решение за повечето проблеми, това е хубавото в него - person Sean Patrick Floyd; 12.10.2010