Servlets 如何将信息从servlet过滤器传递到Restlet ServerResource子类中?

Servlets 如何将信息从servlet过滤器传递到Restlet ServerResource子类中?,servlets,servlet-filters,restlet,restlet-2.0,Servlets,Servlet Filters,Restlet,Restlet 2.0,在Jetty托管的webapp中,我使用servlet过滤器从URL中提取信息,有时将请求路由到非Restlet servlet。对于Restlet servlet,我希望能够将信息传递给我的ServerResource子类,我认为应该能够通过将信息存储在HttpServletRequest的属性中来实现这一点。(Restlet是否支持不同的机制来实现这一点?我在“Restlet in Action”或stackoverflow中找不到任何内容。) 将servlet请求属性复制到Restlet

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

将servlet请求属性复制到Restlet HttpRequest的属性中,但是它的构造函数使用ServletContext参数,而不是像superclass(和默认适配器)ServerAdapter那样的上下文参数——它不会复制servlet请求属性——因此我不能使用ServletAdapter来解决这个问题

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

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


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

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

希望对你有帮助


Thierry

这是由Restlet Framework 2.3m2中提供的修复引起的。

仅供参考,Thierry输入了一个问题,最近在branch 2.3中修复了该问题(参见即将发布的2.3 M2):