Jetty 请求属性未跨服务传播
Jetty Request attributes not propagated across services
服务 A 使用 AsyncProxyServlet 将请求转发到服务 2,但是服务 A 在请求中设置的属性在到达服务 B 后在请求中不可用。servlet 请求属性在 HTTP 调用中不是持久的吗?有人可以帮助我了解发生了什么吗?
public class ForwardServlet extends AsyncProxyServlet
{
//Service A
...
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
...
request.setAttribute("FOO", "BAR"); // This attribute is missing in Service B
super.service(request, response);// Send to service B
}
}
Servlet 请求属性是 Servlet 规范的一部分,是一种在同一 Servlet 容器内跨单个调度链保存值的方法。
这些值不作为任何 HTTP 协议规范的一部分存在,并且不能通过新的 HTTP 请求发送。
servlet 术语中的调度意味着...
- 传入的 HTTP 请求已被解析
- 已创建
HttpServletRequest
object
- 到目的地
Servlet
的调用链已根据 Filter
和 Servlet
url-patterns
的组合确定
- 调度发生在链中的第一个
Filter
- 每个过滤器和最终目标 servlet 可以add/change请求属性
- 每个过滤器或 servlet 也可以获得
RequestDispatcher
到 .forward(req, resp)
或 .include(req, resp)
相同的调度到同一 Servlet 容器上的新位置。
如果您的服务 B 在同一个 Servlet 容器上,请使用 RequestDispatcher
并且您的 Request 属性将随之而来。
如果您的服务 B 在不同的服务器上,那么您需要弄清楚如何使用 HTTP 协议(可能作为请求 headers?)或在内部将这些属性传输到目标服务器您的请求 body 内容(作为 JSON 值?)
服务 A 使用 AsyncProxyServlet 将请求转发到服务 2,但是服务 A 在请求中设置的属性在到达服务 B 后在请求中不可用。servlet 请求属性在 HTTP 调用中不是持久的吗?有人可以帮助我了解发生了什么吗?
public class ForwardServlet extends AsyncProxyServlet
{
//Service A
...
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
...
request.setAttribute("FOO", "BAR"); // This attribute is missing in Service B
super.service(request, response);// Send to service B
}
}
Servlet 请求属性是 Servlet 规范的一部分,是一种在同一 Servlet 容器内跨单个调度链保存值的方法。
这些值不作为任何 HTTP 协议规范的一部分存在,并且不能通过新的 HTTP 请求发送。
servlet 术语中的调度意味着...
- 传入的 HTTP 请求已被解析
- 已创建
HttpServletRequest
object - 到目的地
Servlet
的调用链已根据Filter
和Servlet
url-patterns
的组合确定
- 调度发生在链中的第一个
Filter
- 每个过滤器和最终目标 servlet 可以add/change请求属性
- 每个过滤器或 servlet 也可以获得
RequestDispatcher
到.forward(req, resp)
或.include(req, resp)
相同的调度到同一 Servlet 容器上的新位置。
如果您的服务 B 在同一个 Servlet 容器上,请使用 RequestDispatcher
并且您的 Request 属性将随之而来。
如果您的服务 B 在不同的服务器上,那么您需要弄清楚如何使用 HTTP 协议(可能作为请求 headers?)或在内部将这些属性传输到目标服务器您的请求 body 内容(作为 JSON 值?)