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 22 Java/Android
Java并发编程之详解CyclicBarrier线程同步
Jun 23 Java/Android
详解Java实现数据结构之并查集
Jun 23 Java/Android
Java SSH 秘钥连接mysql数据库的方法
Jun 28 Java/Android
HashMap实现保存两个key相同的数据
Jun 30 Java/Android
swagger如何返回map字段注释
Jul 03 Java/Android
Java 在生活中的 10 大应用
Nov 02 Java/Android
SpringDataJPA实体类关系映射配置方式
Dec 06 Java/Android
Java基于Dijkstra算法实现校园导游程序
Mar 17 Java/Android
Android Flutter实现图片滑动切换效果
Apr 07 Java/Android
Android Rxjava3 使用场景详解
Apr 07 Java/Android
HttpClient实现文件上传功能
Aug 14 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
怎么使 Mysql 数据同步
2006/10/09 PHP
关于PHP中Object对象的笔记分享
2011/06/28 PHP
PHP setTime 设置当前时间的代码
2012/08/27 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
python对字典进行排序实例
2014/09/25 Python
在Python的Django框架中编写编译函数
2015/07/20 Python
Python入门之后再看点什么好?
2018/03/05 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
python中delattr删除对象方法的代码分析
2020/12/15 Python
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
英国最大的在线蜡烛商店:Candles Direct
2019/03/26 全球购物
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
秋季运动会加油稿200字
2014/01/11 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
父母寄语大全
2014/04/12 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
世博会口号
2014/06/20 职场文书
全陪导游词开场白
2015/05/29 职场文书
建国大业观后感600字
2015/06/01 职场文书
2016年师德学习心得体会
2016/01/12 职场文书