RestTemplate设置通用header 并获取header请求参数

在开发项目过程中,使用的架构 springboot + vue,但java项目又拆分成一个基础授权(base)项目,一个获取授权(auth)项目,还有两个业务系统。此时需要通过auth项目去获取base项目的授权信息。因此使用了springboot的RestTemplate来实现不同项目之间的访问。但是在base项目中,安全起见增加了请求拦截器,此时获取header成了问题。搜索了很多的帖子,终于在今天解决掉了,现在把实现方案记录下来。

请求方

增加interceptor

public static class UserAgentInterceptor implements ClientHttpRequestInterceptor {
 
        @Override
        public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
            HttpHeaders headers = request.getHeaders();
            // 这种方案我没有实现成功,所以用的自定义字段
            // headers.add(HttpHeaders.USER_AGENT, "your agent");
            headers.add("customer_agent", "your agent");
            return execution.execute(request, body);
        }
    }

设置interceptor 

@Bean
    public RestTemplate restTemplate() {
        HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
        httpRequestFactory.setConnectionRequestTimeout(CONN_TIMEOUT_IN_MILLIS);
        httpRequestFactory.setConnectTimeout(CONN_TIMEOUT_IN_MILLIS);
        httpRequestFactory.setReadTimeout(READ_TIMEOUT_IN_MILLIS);
 
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters()
                .add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
        restTemplate.setInterceptors(Collections.singletonList(new UserAgentInterceptor()));
        return restTemplate;
    }

服务方

获取自定义的header

Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
String value = request.getHeader(key);

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值