Spring 全局客户端拦截器

Spring Global ClientInterceptor

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

正如我所说,这是一个仍然建立在 Spring Fw 3.2.2.RELEASE 和 spring-ws 2.0.6-RELEASE

之上的遗留系统

你可以实现一个通用的 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;
}

希望对您有所帮助!