我有一个带有 SOAP 端点的 Spring Boot 应用程序和一个实现 EndpointInterceptor
的拦截器类。问题是,此接口中没有可以访问 HttpServletRequest
和 {{1} 的重写方法}}。
我的问题是:
每当 API 请求使用 SOAP 拦截器时,我如何获取 HttpServletResponse
和 HttpServletRequest
对象(我看到很多使用 HttpServletResponse
和 WebMvcConfigurerAdapter
的示例但它仅适用于 Rest @Controller。在我的情况下,它是带有 @Endpoint 的 SOAP,它没有调用重写的方法)。
如果这是不可能的,我怎样才能从 HandlerInterceptor
创建这个对象,因为 handleRequest 覆盖的方法具有如下所示的参数
@覆盖 public boolean handleRequest(MessageContext messageContext, 对象端点)抛出异常 { LOG.info("端点请求处理"); 返回真; }
答案 0 :(得分:1)
Spring-ws 有 TransportContext 类用于存储当前的底层连接。您可以通过代码中的 TransportContextHolder 类静态访问它。
如果您确定底层连接是 HttpServletConnection,那么您可以在拦截器方法中执行以下操作:
TransportContext ctx = TransportContextHolder.getTransportContext();
HttpServletRequest req = ((HttpServletConnection) ctx.getConnection()).getHttpServletRequest();
答案 1 :(得分:0)
如果要操作(覆盖)HttpServletRequest 和 HttpServletResponse 在使用拦截器到达端点之前/之后将是一个坏主意,因为在该级别到达的请求将被预处理并且不会为您提供修改选项。
您可以使用过滤器代替拦截器来实现您的目标。