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 elasticsearch安装以及部署教程
Jun 28 Java/Android
SpringBoot整合阿里云视频点播的过程详解
Dec 06 Java/Android
Java实现二分搜索树的示例代码
Mar 17 Java/Android
剑指Offer之Java算法习题精讲二叉树的构造和遍历
Mar 21 Java/Android
Android超详细讲解组件ScrollView的使用
Mar 31 Java/Android
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
Apr 13 Java/Android
Java由浅入深通关抽象类与接口(下篇)
Apr 26 Java/Android
Android 界面一键变灰 深色主题工具类
Apr 28 Java/Android
Java8 CompletableFuture 异步回调
Apr 28 Java/Android
spring IOC容器的Bean管理XML自动装配过程
May 30 Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
Jul 07 Java/Android
前端与RabbitMQ实时消息推送未读消息小红点实现示例
Jul 23 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/11/19 PHP
php入门小知识
2008/03/24 PHP
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
PHP验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
学习ExtJS accordion布局
2009/10/08 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
django连接oracle时setting 配置方法
2019/08/29 Python
python元组的概念知识点
2019/11/19 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
Python如何发送与接收大型数组
2020/08/07 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
linux面试题参考答案(1)
2016/01/22 面试题
书香校园活动方案
2014/02/28 职场文书
公司开业庆典策划方案
2014/06/04 职场文书
预备党员自我评价范文
2015/03/04 职场文书
python实现简易自习室座位预约系统
2021/06/30 Python