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 23 Java/Android
Springboot使用Spring Data JPA实现数据库操作
Jun 30 Java/Android
详解Java ES多节点任务的高效分发与收集实现
Jun 30 Java/Android
分析ZooKeeper分布式锁的实现
Jun 30 Java/Android
Spring Cloud Gateway去掉url前缀
Jul 15 Java/Android
Sleuth+logback 设置traceid 及自定义信息方式
Jul 26 Java/Android
Java中try catch处理异常示例
Dec 06 Java/Android
Java详细解析==和equals的区别
Apr 07 Java/Android
Java数组详细介绍及相关工具类
Apr 14 Java/Android
Java服务调用RestTemplate与HttpClient的使用详解
Jun 21 Java/Android
前端与RabbitMQ实时消息推送未读消息小红点实现示例
Jul 23 Java/Android
Spring boot实现上传文件到本地服务器
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
php格式化日期和时间格式化示例分享
2014/02/24 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
javascript 命名规则 变量命名规则
2010/02/25 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
简单谈谈json跨域
2016/03/13 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
[03:40]DOTA2英雄梦之声_第01期_炼金术士
2014/06/23 DOTA
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
某公司Java工程师面试题笔试题
2016/03/27 面试题
linux面试题参考答案(11)
2016/11/26 面试题
网络工程师的自我评价
2013/10/02 职场文书
应届毕业生求职信
2013/11/30 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
捐款倡议书范文
2014/02/02 职场文书
企业军训感想
2014/02/07 职场文书
文秘大学生求职信
2014/02/25 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
面试复试通知单
2015/04/24 职场文书
2015年度物流工作总结
2015/04/30 职场文书
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle