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 相关文章推荐
分析Netty直接内存原理及应用
Jun 14 Java/Android
SpringBoot2 参数管理实践之入参出参与校验的方式
Jun 16 Java/Android
解决SpringBoot跨域的三种方式
Jun 26 Java/Android
死磕 java同步系列之synchronized解析
Jun 28 Java/Android
SpringBoot集成Druid连接池连接MySQL8.0.11
Jul 02 Java/Android
logback 实现给变量指定默认值
Aug 30 Java/Android
详解Java七大阻塞队列之SynchronousQueue
Sep 04 Java/Android
MybatisPlus EntityWrapper如何自定义SQL
Mar 22 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
Apr 14 Java/Android
mybatis 获取更新记录的id
May 20 Java/Android
JavaScript正则表达式实现注册信息校验功能
May 30 Java/Android
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
Jul 15 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
8个出色的WordPress SEO插件收集
2011/02/26 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
2016/04/15 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
python查找指定具有相同内容文件的方法
2015/06/28 Python
django实现前后台交互实例
2017/08/07 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
Python中static相关知识小结
2018/01/02 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
Python全排列操作实例分析
2018/07/24 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
python实现图片转字符画的完整代码
2021/02/21 Python
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
办公室内勤工作职责
2013/12/11 职场文书
党员个人公开承诺书
2014/08/29 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
自主招生自荐信怎么写
2015/03/24 职场文书
婚姻出轨保证书
2015/05/08 职场文书
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js