gpt4 book ai didi

servlets - 如何将信息从 Servlet 过滤器传递到 ReSTLet ServerResource 子类?

转载 作者:行者123 更新时间:2023-12-02 19:18:24 26 4
gpt4 key购买 nike

在 Jetty 托管的 Web 应用程序中,我使用 servlet 过滤器从 URL 中提取信息,有时将请求路由到非 ReSTLet servlet。对于 ReSTLet servlet,我希望能够将信息传递给我的 ServerResource 子类,并且我认为我应该能够通过将信息存储在 HttpServletRequest 的属性中来实现此目的。 (ReSTLet 是否支持不同的机制来实现此目的?我在“ReSTLet in Action”或 stackoverflow 上找不到任何内容。)

ServletAdapter将servlet请求属性复制到ReSTLet HttpRequest的属性中,但它的构造函数采用ServletContext参数,而不是像父类(super class)(和默认适配器)ServerAdaptor那样的Context参数——它不会复制servlet请求属性——所以我不能使用ServletAdapter来解决问题。

javadoc for HttpServerHelper ,由 ServerServlet.createServer() 实例化,声称将名为“adapter”的上下文参数设置为 ServerAdapter 子类的类名将导致 HttpServerHelper 使用指定的类,但在我的调试中,我可以看到“adapter”上下文参数不存在于通过 ServerServlet.createServer() 中的伪服务器传递到 HttpServerHelper 构造函数的子上下文中,尽管它位于父上下文中。在我看来,这就像一个错误:AFAICT,因为子上下文不携带其父级的属性或参数,所以当前实现的 HttpServerHelper 将永远不会看到指示它使用非默认适配器的参数。如果子上下文中不存在,也许 HttpServerHelper.getHelpedParameters() 应该从其“帮助”服务器上下文的父上下文中添加“适配器”参数? (此修复也适用于 HttpServerHelper javadoc 中提到的其他参数:“useForwardedForHeader”。)

作为解决方法,我扩展了 ServerServlet.createServer() 以将“适配器”参数复制到它传递到 HttpServerHelper 的子上下文中。这有效。

我还对 ServerAdapter 进行了子类化,以将 servlet 请求属性复制到统一请求:从 ServletAdaptor.toRequest() 直接复制/粘贴。这也有效。

最佳答案

也许解决方法是实现另一个 servlet 过滤器,为 servlet 和 ReSTLet 环境提供全局上下文。该上下文可以存储在 ThreadLocal 中。在您的 ReSTLet 资源中,您可以访问此上下文和您的参数...

希望对您有帮助。

蒂埃里

关于servlets - 如何将信息从 Servlet 过滤器传递到 ReSTLet ServerResource 子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15050142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com