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 相关文章推荐
手把手教你用SpringBoot将文件打包成zip存放或导出
Jun 11 Java/Android
解决tk mapper 通用mapper的bug问题
Jun 16 Java/Android
Java数组与堆栈相关知识总结
Jun 29 Java/Android
JavaWeb 入门篇(3)ServletContext 详解 具体应用
Jul 16 Java/Android
Java 在生活中的 10 大应用
Nov 02 Java/Android
Java 实战项目之家居购物商城系统详解流程
Nov 11 Java/Android
Java 获取Word中所有的插入和删除修订的方法
Apr 06 Java/Android
Java由浅入深通关抽象类与接口(下篇)
Apr 26 Java/Android
Java异常体系非正常停止和分类
Jun 14 Java/Android
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
Jun 21 Java/Android
JDK8中String的intern()方法实例详细解读
Sep 23 Java/Android
Java获取字符串编码格式实现思路
Sep 23 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
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
php中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
2019/10/18 PHP
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
jQuery.event兼容各浏览器的event详细解析
2013/12/18 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
jQuery事件用法详解
2016/10/06 Javascript
ASP.NET jquery ajax传递参数的实例
2016/11/02 Javascript
值得分享的Bootstrap Table使用教程
2016/11/23 Javascript
详解javascript获取url信息的常见方法
2016/12/19 Javascript
浅谈键盘上回车按钮的js触发事件
2017/02/13 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
vue2 前端搜索实现示例
2018/02/26 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
js module大战
2019/04/19 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
django开发之settings.py中变量的全局引用详解
2017/03/29 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
Python小白垃圾回收机制入门
2020/06/09 Python
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
Python anaconda安装库命令详解
2021/10/16 Python
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server