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实现对Hadoop的操作
Jul 01 Java/Android
swagger如何返回map字段注释
Jul 03 Java/Android
java设计模式--七大原则详解
Jul 21 Java/Android
深入解读Java三大集合之map list set的用法
Nov 11 Java/Android
Spring Bean是如何初始化的详解
Mar 22 Java/Android
springboot layui hutool Excel导入的实现
Mar 31 Java/Android
Java Lambda表达式常用的函数式接口
Apr 07 Java/Android
Java详细解析==和equals的区别
Apr 07 Java/Android
Java 使用类型为Object的变量指向任意类型的对象
Apr 13 Java/Android
Java处理延时任务的常用几种解决方案
Jun 01 Java/Android
Java实现注册登录跳转
Jun 16 Java/Android
SpringCloud超详细讲解Feign声明式服务调用
Jun 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
php操作mysql数据库的基本类代码
2014/02/25 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
JavaScript asp.net 获取当前超链接中的文本
2009/04/14 Javascript
autoIMG 基于jquery的图片自适应插件代码
2011/03/12 Javascript
简单的js表单验证函数
2013/10/28 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
学习jQuey中的return false
2015/12/18 Javascript
如何在Angular.JS中接收并下载PDF
2016/11/26 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
基于AngularJS实现表单验证功能
2017/07/28 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
webpack4 optimization使用总结
2019/11/10 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
[07:40]DOTA2每周TOP10 精彩击杀集锦vol.4
2014/06/25 DOTA
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
Python实现的最近最少使用算法
2015/07/10 Python
Python两个内置函数 locals 和globals(学习笔记)
2016/08/28 Python
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
在pycharm中配置Anaconda以及pip源配置详解
2019/09/09 Python
浅谈tensorflow模型保存为pb的各种姿势
2020/05/25 Python
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
关于爱国的标语
2014/06/24 职场文书
预备党员转正意见
2015/06/01 职场文书
公司管理制度范本
2015/08/03 职场文书
导游词之台湾阿里山
2019/10/23 职场文书
教你使用TensorFlow2识别验证码
2021/06/11 Python
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL