使用 WebFilter 从 XML 获取请求参数

Posted

技术标签:

【中文标题】使用 WebFilter 从 XML 获取请求参数【英文标题】:Get Request Parameters from XML using WebFilter 【发布时间】:2015-07-19 06:06:10 【问题描述】:

我正在使用 Glassfish 和 SOAP 开发 Web 服务。我有几个 web 方法,我想将我的 webmethod 名称和他的参数介绍给 http 头请求。

例如:

我有这条路:

上下文:网络服务

webMethod:makeSomething

参数:a=2

所以我创建了一个名为 ProfilingFilter 的类:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, javax.servlet.ServletException 
           
    if (request.getContentLength() != -1 && context != null) 
        ((HttpServletResponse) response).addHeader("Operation", -->PATH+PARAMETERS);
        //  ((HttpServletResponse) response).addHeader("Operation", -->makeSomething?a=2);
    
    

是否可以使用 servlet 响应或 servlet 请求来获取此信息?

如果没有,我该怎么做?

【问题讨论】:

因为这是一个 SOAP 服务,所以没有 HTTP 读取请求。所有 SOAP 操作都是通过 HTTP PUT 方法完成的。我的建议是您安装类似 WireShark 并捕获 XML 请求,或者甚至更好地使用 SOAP UI 来捕获 XML 请求并查看实际请求。这将使您对如何实现您想要的目标有所了解。 你的问题不是很清楚。看起来您正在尝试将 HTTP 标头添加到 Web 服务请求中,然后才到达您的 Web 服务处理 bean。那是对的吗?您正在运行 JAX-WS 网络服务吗? “网络方法”是什么意思?您指的是 HTTP 操作还是实际的 Web 服务操作,例如 WSDL? 没有。当我发出请求时,我想通过 Http Servlet 响应或类似的方式将 Soap 消息响应添加到 http 标头。是的,我正在运行 jax-ws。 WebMethod 是我的 WebService 中的一个方法。 您想将完整的 SOAP 响应信封粘贴到 HTTP 标头中吗?为什么?不管是什么原因,由于浏览器对 HTTP 标头的大小有限制,您可能无法做到这一点。您是否对 SOAP 标头感兴趣? 我不想要完整的回复。只是有关肥皂内容消息的一些信息 【参考方案1】:

您需要访问 HTTP 请求正文。只有一个警告:您只能读取一次流,这意味着您必须做一些技巧才能保持 SOAP 请求正常工作。看这里:

http://wetfeetblog.com/servlet-filer-to-log-request-and-response-details-and-payload/431

本示例介绍了读取 HTTP 请求,然后将原始数据向下传递到过滤器链。

HTH,马克

【讨论】:

以上是关于使用 WebFilter 从 XML 获取请求参数的主要内容,如果未能解决你的问题,请参考以下文章

WebFilter使用omnifaces获得404而不工作

如何在 WebFilter 上配置 Spring DataBuffer 大小

servlet 从java中获取参数

使用 Tomcat,@WebFilter 不适用于 web.xml 中的 <filter-mapping>

成功请求后,Mono 获取 OnCancel 而不是 OnSuccessOrError

Spring WebFilter 映射