当前位置: 首页 > news >正文

RestTemplate 添加公共的请求头信息

场景描述

项目中 有很多的RestTemplate 接口,去调用第三方系统,原来第三方系统没有开启权限认证,可以直接调用。现在第三方系统开启了权限认证,导致 这些 RestTemplate 接口调用的时候,无法获取数据。

思路

RestTemplate 在请求第三方接口之前,为他们增加公共的请求头信息。这样第三方系统在拦截到请求之后,可以通过请求头信息,来判断是否需要进行权限认证,如果是免权限认证的接口请求,那么直接放行。

改造代码

  • 改造RestTemplate 配置类,改造前:
package com.ruoyi.web.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;import java.util.Collections;@Configuration
public class RestTemplateConfig{private int timeoutms = 5 * 60 *1000;@Beanpublic RestTemplate restTemplate(ClientHttpRequestFactory factory){return new RestTemplate(factory);    }@Beanpublic ClientHttpRequestFactory simpleClientHttpRequestFactory(){SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();factory.setReadTimeout(timeoutms);//msfactory.setConnectTimeout(timeoutms);//msreturn factory;}
}
  • 改造后
package com.ruoyi.web.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;import java.util.Collections;@Configuration
public class RestTemplateConfig{private int timeoutms = 5 * 60 *1000;@Autowiredprivate  TokenClientHttpRequestInterceptor tokenClientHttpRequestInterceptor;@Beanpublic RestTemplate restTemplate(ClientHttpRequestFactory factory){RestTemplate restTemplate = new RestTemplate(factory);restTemplate.setInterceptors(Collections.singletonList(tokenClientHttpRequestInterceptor));return restTemplate;}@Beanpublic ClientHttpRequestFactory simpleClientHttpRequestFactory(){SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();factory.setReadTimeout(timeoutms);//msfactory.setConnectTimeout(timeoutms);//msreturn factory;}
}
  • 增加 自定义的 RestTemplate 请求拦截器类 TokenClientHttpRequestInterceptor
package com.ruoyi.web.config;import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component;import java.io.IOException;/*** @Description : 自定义 RestTemplate 请求拦截器* @Date: 2024-01-11 12:06*/
@Component
public class TokenClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {private static final String ADMIN_AUTHORIZATION = "admin_authorization";@Overridepublic ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {try {HttpHeaders headers = request.getHeaders();headers.add(ADMIN_AUTHORIZATION , ADMIN_AUTHORIZATION );} catch (Exception e) {e.printStackTrace();}return execution.execute(request,body);}
}
  • 第三方系统部分代码
/*** 权限拦截** @author xuxueli 2015-12-12 18:09:04*/
@Component
public class PermissionInterceptor extends HandlerInterceptorAdapter {@Resourceprivate LoginService loginService;@Resourceprivate XxlJobUserDao xxlJobUserDao;private static final String ADMIN_AUTHORIZATION = "admin_authorization";@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {if (!(handler instanceof HandlerMethod)) {return super.preHandle(request, response, handler);}// if need loginboolean needLogin = true;boolean needAdminuser = false;HandlerMethod method = (HandlerMethod)handler;String header = request.getHeader(ADMIN_AUTHORIZATION );if (header != null && header.trim().length() > 0){XxlJobUser user = xxlJobUserDao.loadByUserName("admin");request.setAttribute(LoginService.LOGIN_IDENTITY_KEY, user);return super.preHandle(request, response, handler);}
....................................

相关文章:

  • 手把手教你学会接口自动化系列十二-将用例从json形式改成excel来管理
  • MySQL 查看表结构简单命令
  • 跳跃游戏【贪心】
  • 案例126:基于微信小程序的民大食堂用餐综合服务平台
  • VIT系列
  • 【Python数据分析系列】实现txt文件与列表(list)相互读写转换(源码+案例)
  • SpringMVC RESTful案例
  • 强化学习应用(五):基于Q-learning的物流配送路径规划研究(提供Python代码)
  • 在 ESP-IDF 环境下,使用标准 C 扩展 Micropython 模块
  • 【Linux基础】Linux对时配置
  • 鸿蒙应用开发学习:让page页面强制横屏
  • 国产AI工具钉钉AI助理:开启个性化助手服务的新篇章
  • Cesium笔记 初始化 原生Cesium
  • golang中的字符串拼接
  • MT8766安卓核心板/开发板_MTK联发科4G安卓手机主板方案定制开发
  • 11111111
  • 2017年终总结、随想
  • AHK 中 = 和 == 等比较运算符的用法
  • cookie和session
  • exif信息对照
  • interface和setter,getter
  • JS+CSS实现数字滚动
  • Vue全家桶实现一个Web App
  • Vue小说阅读器(仿追书神器)
  • 搭建gitbook 和 访问权限认证
  • 多线程 start 和 run 方法到底有什么区别?
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 算法---两个栈实现一个队列
  • 一些关于Rust在2019年的思考
  • hi-nginx-1.3.4编译安装
  • Mac 上flink的安装与启动
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • # 数论-逆元
  • #Linux(make工具和makefile文件以及makefile语法)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C语言)fread与fwrite详解
  • (C语言)共用体union的用法举例
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (solr系列:一)使用tomcat部署solr服务
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (图)IntelliTrace Tools 跟踪云端程序
  • (未解决)macOS matplotlib 中文是方框
  • (五)Python 垃圾回收机制
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)【Hibernate总结系列】使用举例
  • (转)Linq学习笔记
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • /*在DataTable中更新、删除数据*/
  • @ModelAttribute使用详解
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @selector(..)警告提示
  • [C#] 基于 yield 语句的迭代器逻辑懒执行