我需要从每个请求中获取某个自定义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的新手。
答案 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);
}
}
<强>参考:强>