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 相关文章推荐
Spring Data JPA使用JPQL与原生SQL进行查询的操作
Jun 15 Java/Android
JVM入门之类加载与字节码技术(类加载与类的加载器)
Jun 15 Java/Android
探讨Java中的深浅拷贝问题
Jun 26 Java/Android
分析JVM源码之Thread.interrupt系统级别线程打断
Jun 29 Java/Android
SpringBoot读取Resource下文件的4种方法
Jul 02 Java/Android
小程序与后端Java接口交互实现HelloWorld入门
Jul 09 Java/Android
Java日常练习题,每天进步一点点(38)
Jul 26 Java/Android
关于MybatisPlus配置双数据库驱动连接数据库问题
Jan 22 Java/Android
剑指Offer之Java算法习题精讲二叉树专项训练
Mar 21 Java/Android
详解Flutter和Dart取消Future的三种方法
Apr 07 Java/Android
SpringBoot项目部署到阿里云服务器的实现步骤
Jun 28 Java/Android
Android实现获取短信验证码并自动填充
May 21 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
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
2013/06/24 PHP
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
IE8 原生JSON支持
2009/04/13 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
jQuery实现对象转为url参数的方法
2017/01/11 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
基于python实现简单日历
2018/07/28 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
python中可以声明变量类型吗
2020/06/18 Python
Pandas之缺失数据的实现
2021/01/06 Python
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
StubHub希腊:购买体育赛事、音乐会和剧院门票
2019/08/03 全球购物
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
文科教师毕业的自我评价
2014/01/16 职场文书
学校献爱心活动总结
2014/07/08 职场文书
班子查摆四风个人对照检查材料思想汇报
2014/10/04 职场文书
求职推荐信范文
2015/03/27 职场文书
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python