[英]How to get HttpServletRequest and HttpServletResponse in FreeMarker?
[英]How to get HttpServletRequest and HttpServletResponse in SOAP interceptor in spring
我有一個帶有 SOAP 端點的 Spring Boot 應用程序和一個實現EndpointInterceptor
的攔截器類。問題是,這個接口中沒有可以訪問HttpServletRequest
和HttpServletResponse
重寫方法。
我的問題是:
每當 API 請求使用 SOAP 攔截器時,我如何獲取HttpServletRequest
和HttpServletResponse
對象(我看到許多使用WebMvcConfigurerAdapter
和HandlerInterceptor
示例,但它僅適用於 Rest @Controller。在我的情況下,它是帶有 @Endpoint 的 SOAP,它是不調用重寫的方法)。
如果這是不可能的,我怎樣才能從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.