首页 > 解决方案 > Spring 全局客户端拦截器

问题描述

我有一个使用大量客户服务的遗留应用程序。最近,需要为每个请求添加一个自定义的 http 安全标头。一种方法是为每个 WebServiceTemplate 添加一个 ClientInterceptor,但我觉得它有点重复代码。有没有办法应用全局 ClientInterceptor ?

正如我所说,这是一个遗留系统,它仍然建立在 Spring Fw 3.2.2.RELEASE 和 spring-ws 2.0.6-RELEASE 之上

标签: springspring-integrationspring-ws

解决方案


您可以实现一个 general ClientInterceptor,如下所示:

public class AddCustomSecurityHeader implements ClientInterceptor {

    @Override
    public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException {
       TransportContext context = TransportContextHolder.getTransportContext();
       HttpComponentsConnection connection =(HttpComponentsConnection) context.getConnection();
       connection.addRequestHeader("custom-security-header", "lorem ipsum");

       return true;
    }
}

然后你声明一个@Bean类型WebServiceTemplate

@Bean
public WebServiceTemplate webServiceTemplate() {
    WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
    // add your current configuration here

    ClientInterceptor[] interceptors = {new AddCustomSecurityHeader()};
    webServiceTemplate.setInterceptors(interceptors);
    return webServiceTemplate;
}

我希望它有帮助!


推荐阅读