spring如何在SOAP拦截器中获取HttpServletRequest和HttpServletResponse

时间:2021-06-25 10:42:39

标签: java spring rest soap spring-security

我有一个带有 SOAP 端点的 Spring Boot 应用程序和一个实现 EndpointInterceptor 的拦截器类。问题是,此接口中没有可以访问 HttpServletRequest 和 {{1} 的重写方法}}。

我的问题是:

  1. 每当 API 请求使用 SOAP 拦截器时,我如何获取 HttpServletResponseHttpServletRequest 对象(我看到很多使用 HttpServletResponseWebMvcConfigurerAdapter 的示例但它仅适用于 Rest @Controller。在我的情况下,它是带有 @Endpoint 的 SOAP,它没有调用重写的方法)。

  2. 如果这是不可能的,我怎样才能从 HandlerInterceptor 创建这个对象,因为 handleRequest 覆盖的方法具有如下所示的参数

    @覆盖 public boolean handleRequest(MessageContext messageContext, 对象端点)抛出异常 { LOG.info("端点请求处理"); 返回真; }

2 个答案:

答案 0 :(得分:1)

Spring-ws 有 TransportContext 类用于存储当前的底层连接。您可以通过代码中的 TransportContextHolder 类静态访问它。

如果您确定底层连接是 HttpServletConnection,那么您可以在拦截器方法中执行以下操作:

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

答案 1 :(得分:0)

如果要操作(覆盖)HttpServletRequest 和 HttpServletResponse 在使用拦截器到达端点之前/之后将是一个坏主意,因为在该级别到达的请求将被预处理并且不会为您提供修改选项。

您可以使用过滤器代替拦截器来实现您的目标。

相关问题