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

2023-12-22

我需要从每个请求中获取特定的自定义 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(使用前将#替换为@)

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

随机推荐