如何拦截自定义HTTP标头值并将其存储在Wicket的WebSession中?

时间:2010-10-12 12:15:36

标签: java java-ee wicket servlet-filters

我需要从每个请求中获取某个自定义HTTP标头值并将其放在WebSession中,以便以后可以在任何Web页面上使用它。 (我相信Wicket这样做的方法是让一个自定义类扩展具有适当访问器的WebSession。)

我的问题是,我需要什么样的过滤器(或其他机制)来拦截标头并访问WebSession 来存储值?

我尝试使用普通的Java EE Filter,使用

执行此操作
CustomSession session = (CustomSession) AuthenticatedWebSession.get();

但是(也许并不奇怪),产量:

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

我是否可以扩展WicketFilter并在那里进行(我可以在那时访问会话吗?),还是需要更复杂的东西?

当然,如果我做错了,请指出来;我是Wicket的新手。

1 个答案:

答案 0 :(得分:4)

我猜您需要实现自定义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);
    }

}

<强>参考: