簡體   English   中英

spring如何在SOAP攔截器中獲取HttpServletRequest和HttpServletResponse

[英]How to get HttpServletRequest and HttpServletResponse in SOAP interceptor in spring

我有一個帶有 SOAP 端點的 Spring Boot 應用程序和一個實現EndpointInterceptor的攔截器類。問題是,這個接口中沒有可以訪問HttpServletRequestHttpServletResponse重寫方法。

我的問題是:

  1. 每當 API 請求使用 SOAP 攔截器時,我如何獲取HttpServletRequestHttpServletResponse對象(我看到許多使用WebMvcConfigurerAdapterHandlerInterceptor示例,但它僅適用於 Rest @Controller。在我的情況下,它是帶有 @Endpoint 的 SOAP,它是不調用重寫的方法)。

  2. 如果這是不可能的,我怎樣才能從MessageContext創建這個對象,因為 handleRequest 覆蓋的方法具有該參數,如下所示

    @Override public boolean handleRequest(MessageContext messageContext, Object endpoint) throws Exception { LOG.info("Endpoint Request Handling"); 返回真; }

Spring-ws 有 TransportContext 類用於存儲當前的底層連接。 您可以在代碼中通過 TransportContextHolder 類靜態訪問它。

如果您確定底層連接是 HttpServletConnection 那么您可以在攔截器方法中執行以下操作:

TransportContext ctx = TransportContextHolder.getTransportContext();
HttpServletRequest req = ((HttpServletConnection) ctx.getConnection()).getHttpServletRequest();

如果您想在使用攔截器到達端點之前/之后操作(覆蓋) HttpServletRequest 和 HttpServletResponse 將是一個壞主意,因為到達該級別的請求將被預處理並且不會為您提供修改選項。

您可以使用過濾器而不是攔截器來實現您的目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM