spring - Spring 全局客户端拦截器
问题描述
我有一个使用大量客户服务的遗留应用程序。最近,需要为每个请求添加一个自定义的 http 安全标头。一种方法是为每个 WebServiceTemplate 添加一个 ClientInterceptor,但我觉得它有点重复代码。有没有办法应用全局 ClientInterceptor ?
正如我所说,这是一个遗留系统,它仍然建立在 Spring Fw 3.2.2.RELEASE 和 spring-ws 2.0.6-RELEASE 之上
解决方案
您可以实现一个 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;
}
我希望它有帮助!
推荐阅读
- c++ - 为什么输出是
- azure - Azure Web 应用程序的 Maven 插件"
"不工作 - apache-spark - Spark - 如何将约 20TB 的数据从 DataFrame 写入配置单元表或 hdfs?
- python-3.x - scrapy - [twisted] NameError: name 'connect' 未定义
- laravel-5.4 - 使用未定义的常量 id - 在 laravel 5.4 中假定为 'id'
- python-3.x - python while循环在一个函数中
- javascript - 未定义索引:XAMPP 中的名称
- python - 如何在没有视图模型的情况下呈现 html 页面?
- mysql - 为什么在尝试使用命令行进入 mysql 时出现“权限被拒绝”?
- laravel - 更新现有数组laravel 5.5中的项目