SpringCloud Feign请求头删除修改的操作代码


Posted in Java/Android onMarch 20, 2022

Feign请求头修改删除操作

@Configuration
public class ClientConfiguration {
    @Bean
    public RequestInterceptor headerInterceptor() {
        return new RequestInterceptor() {
            @Override
            public void apply(RequestTemplate template) {
                HttpServletRequest httpServletRequest = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
                if (httpServletRequest.getRequestURI().contains(template.url())) {
                    try {
                        Field connectorField = ReflectionUtils.findField(SecurityContextHolderAwareRequestWrapper.class, "request");
                        connectorField.setAccessible(true);
                        FirewalledRequest firewalledRequest = (FirewalledRequest) connectorField.get(httpServletRequest);
                        if(Objects.isNull(firewalledRequest))
                            return;

                        Field firewalledField = ReflectionUtils.findField(FirewalledRequest.class, "request");
                        firewalledField.setAccessible(true);
                        RequestFacade requestFacade = (RequestFacade) firewalledField.get(firewalledRequest);
                        if(Objects.isNull(requestFacade))
                            return;

                        connectorField = ReflectionUtils.findField(RequestFacade.class, "request");
                        firewalledField.setAccessible(true);
                        Request connectorRequest = (Request) connectorField.get(requestFacade);
                        if(Objects.isNull(connectorRequest))
                            return;

                        Field coyoteField = ReflectionUtils.findField(Request.class, "coyoteRequest", org.apache.coyote.Request.class);
                        coyoteField.setAccessible(true);
                        org.apache.coyote.Request coyoteRequest = (org.apache.coyote.Request) coyoteField.get(connectorRequest);
                        if(Objects.isNull(coyoteRequest))
                            return;

                        Field mimeHeadersField = ReflectionUtils.findField(org.apache.coyote.Request.class, "headers", MimeHeaders.class);
                        mimeHeadersField.setAccessible(true);
                        MimeHeaders mimeHeaders = (MimeHeaders) mimeHeadersField.get(coyoteRequest);
                        mineHeadersHandle(mimeHeaders);
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                    List<String> contentTypeList = Lists.newArrayList("application/json;charset=UTF-8");
                    Map<String, Collection<String>> headers = ImmutableMap.of(HttpHeaders.CONTENT_TYPE, contentTypeList);
                    template.headers(headers);
                }
            }
        };
    }

    protected static void mineHeadersHandle(MimeHeaders mimeHeaders) {
        mimeHeaders.removeHeader(HttpHeaders.CONTENT_TYPE);
    }
}

到此这篇关于SpringCloud Feign请求头删除修改的操作代码的文章就介绍到这了,更多相关SpringCloud Feign请求头内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
详解Java实现数据结构之并查集
Jun 23 Java/Android
Spring mvc是如何实现与数据库的前后端的连接操作的?
Jun 30 Java/Android
SpringBoot中使用Redis作为全局锁示例过程
Mar 24 Java/Android
Spring Boot 底层原理基础深度解析
Apr 03 Java/Android
Spring Security使用单点登录的权限功能
Apr 03 Java/Android
Java中API的使用方法详情
Apr 06 Java/Android
Android存储中最基本的文件存储方式
Apr 30 Java/Android
Java处理延时任务的常用几种解决方案
Jun 01 Java/Android
一文搞懂Java中的注解和反射
Jun 21 Java/Android
Java+swing实现抖音上的表白程序详解
Jun 25 Java/Android
Android RecyclerView实现九宫格效果
Jun 28 Java/Android
springboot 全局异常处理和统一响应对象的处理方式
Jun 28 Java/Android
JavaWeb实现显示mysql数据库数据
关于Mybatis中SQL节点的深入解析
springboot 自定义配置 解决Boolean属性不生效
Mar 18 #Java/Android
使用Java去实现超市会员管理系统
Mar 18 #Java/Android
详解Spring Security中的HttpBasic登录验证模式
RestTemplate如何通过HTTP Basic Auth认证示例说明
Java实现二分搜索树的示例代码
You might like
以文本方式上传二进制文件的PHP程序
2006/10/09 PHP
PHP文本操作类
2006/11/25 PHP
php调用c接口无错版介绍
2014/03/11 PHP
浅析iis7.5安装配置php环境
2015/05/10 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
超漂亮的Bootstrap 富文本编辑器summernote
2016/04/05 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
利用JS实现一个同Excel表现的智能填充算法
2018/08/13 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
Python中__name__的使用实例
2015/04/14 Python
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
2018/11/07 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
python pymysql库的常用操作
2020/10/16 Python
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
新西兰床上用品和家居用品购物网站:Adairs
2018/04/27 全球购物
物流司机岗位职责
2013/12/28 职场文书
驾驶员岗位职责
2014/01/29 职场文书
餐饮业员工工作决心书
2014/03/11 职场文书
大学学习计划书范文
2014/05/02 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js