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);}
....................................

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/623506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生日视频模板-试试这样制作

视频制作已经成为表达情感、记录生活的重要方式。尤其在生日这样的特殊日子,一份个性化的视频祝福不仅能让人感到温馨,还能成为长久珍藏的回忆。那么,如何快速制作出精美的生日模版视频呢?下面就给大家介绍几种可以制作生日模版的…

通信入门系列——离散卷积、连续卷积、卷积性质

本节目录 一、线性系统的激励响应 1、离散δ信号 2、离散卷积 3、连续δ信号 4、连续卷积 二、卷积性质 1、交换律 2、分配律 3、结合律 4、与冲激函数卷积本节内容 一、线性系统的激励响应 输入信号又称为激励,输出信号又称为响应。一个信号输入给一个线性系统的时…

基于单片机设计的智慧农业大棚检测系统

一、设计目标 本项目基于单片机设计一个智慧农业大棚检测系统,以提供实时监测和管理大棚环境的关键参数。系统支持环境温度、湿度检测,光照强度检测,并能根据预设的阀值进行报警提示。为了实现数据的显示和管理,该系统还利用Qt开…

\deep\和>>> 以及 !important

记录 https://blog.csdn.net/weixin_43422861/article/details/134716359 都是深度选择器 >>> 仅在css中起作用 ::v-deep 和 /deep/ 仅在scss / less中起作用样式中 !important 用在某个样式后面起作用

生成式人工智能研究焦点:揭秘基于扩散的模型

生成式人工智能研究焦点:揭秘基于扩散的模型 文章目录 生成式人工智能研究焦点:揭秘基于扩散的模型去噪扩散是什么让扩散发挥作用?采样生成图像的设计选择以更少的步骤理顺流程在低噪音水平下步骤高阶求解器可实现更准确的步骤训练降噪器的设…

50天精通Golang(第17天)

beego框架总结及数据库连接配置 一、beego框架总结 1.1 Beego项目组织架构 上节课程内容对beego的案例代码进行了一个简单的分析,总结一下beego项目的组织结构,总结如下: 1.1.1 项目配置:conf 项目配置文件所在的目录&#x…

Vue安装项目报错default@0.1.0 serve: `vue-cli-service serve`解决办法

出现此问题的原因:项目缺少依赖项 解决方式:将项目中的node_modules和package-lock.json两个文件手动删除掉,然后在VS窗口中,执行npm install。重启VS即可。

异常处理注解 @ExceptionHandler

今天记录下 SpringBoot 中 ExceptionHandler 的使用。 场景 有一个员工表(employee),且给表中的 username 属性设置了唯一性。 -- auto-generated definition create table employee (id bigint auto_increment comment 主键primary key,name va…

【WPF.NET开发】OpenType字体

本文内容 OpenType 字体格式变量大写字母连字花体备用项数字样式版式类 本主题概述了 Windows Presentation Foundation (WPF) 中 OpenType 字体技术的一些主要功能。 1、OpenType 字体格式 OpenType 字体格式是 TrueType 字体格式的扩展,增加了对 PostScript 字…

解析Nginx配置文件conf中的常用块

解析Nginx配置文件conf中的常用块 Nginx是一个高性能的HTTP和反向代理服务器,它的配置文件主要由多个块组成。本文将介绍Nginx配置文件中的常用块及其功能。 events块 events块用于设置Nginx的工作模式和连接数相关的参数。 events {worker_connections 1024; #…

用python调用Mybatis

要使用Python调用MyBatis,您需要按照以下步骤进行操作: 安装MyBatis和相关依赖库 在Python中使用MyBatis,需要先安装MyBatis和相关依赖库。您可以使用pip命令安装MyBatis的Python客户端库,例如: shell复制代码 pip …

Linux的SSH远程管理和服务器之间的免密连接

目录 一、远程管理基础 1.ssh协议 2.ssh原理 3、使用ssh协议传输的命令 4.登录方法 二、免密连接 1.免密连接的原理 2.实战 一、远程管理基础 1.ssh协议 ssh协议是基于C/S机构的安全通道协议,通信数据进行加密处理,用于远程管理。 ssh的服务名…

MATLAB二维与三维绘图实验

本文MATLAB源码,下载后直接打开运行即可[点击跳转下载]-附实验报告https://download.csdn.net/download/Coin_Collecter/88740747 一、实验目的 掌握图形对象属性的基本操作。掌握利用图形对象进行绘图操作的方法。 二、实验内容 利用图形对象绘制曲线&#xff…

【图解数据结构】深入剖析时间复杂度与空间复杂度的奥秘

🌈个人主页:聆风吟 🔥系列专栏:图解数据结构、算法模板 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️算法的定义二. ⛳️算法的特性2.1 🔔输入输出2.2 🔔输入输出2.3 &…

MySQL面试题2

文章目录 面试题 (9-15) 面试题 (9-15) 09)查询学过「张三」老师授课的同学的信息 SELECT s.*,c.cname,t.tname FROM t_mysql_teacher t,t_mysql_student s,t_mysql_course c,t_mysql_score sc WHERE t.tidc.tid and c.cidsc.cid and sc.sids.sid and tname ‘张…

24校招,Moka测试开发工程师一面

前言 大家好,今天回顾一下楼主当时参加moka测试开发工程师的面试 对其中一些重要问题,我也给出了相应的答案 过程 自我介绍挑一个项目,详细介绍你在其中担任的职责如何安排工作的,有什么成果?回归测试如何设计&…

网站建设网络设计营销类网站eyouCMS模板(PC+WAP)

模板介绍: 本模板自带eyoucms内核,无需再下载eyou系统,原创设计、手工书写DIVCSS,完美兼容IE7、Firefox、Chrome、360浏览器等;主流浏览器;结构容易优化;多终端均可正常预览。

【面试合集】说说微信小程序的登录流程?

面试官:说说微信小程序的登录流程? 一、背景 传统的web开发实现登陆功能,一般的做法是输入账号密码、或者输入手机号及短信验证码进行登录 服务端校验用户信息通过之后,下发一个代表登录态的 token 给客户端,以便进行…

线程安全2

文章目录 锁的可重入性死锁内存可见性引起的线程安全 锁的可重入性 直观来看这个代码不能运行 为啥没有出现阻塞? 当前由于是同一个线程,此时的锁对象,就知道了第二次加锁的线程,就是持有锁的线程,第二次操作&#xff…