我需要从每个请求中获取特定的自定义 HTTP 标头值并将其放入 WebSession 中,以便以后可以在任何网页上使用它。 (我相信 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 并在那里执行它(此时我可以访问会话吗?),还是需要更复杂的东西?
当然,如果我做的完全错误,请指出;我是威克特的新手。
我猜你需要实现一个自定义的 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);
}
}
参考:
- 请求周期和请求周期
处理器 https://cwiki.apache.org/WICKET/request-cycle-and-request-cycle-processor.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)