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 相关文章推荐
SpringAop日志找不到方法的处理
Jun 21 Java/Android
SpringBoot集成Redis,并自定义对象序列化操作
Jun 22 Java/Android
Java常用工具类汇总 附示例代码
Jun 26 Java/Android
Java使用Unsafe类的示例详解
Sep 25 Java/Android
java executor包参数处理功能 
Feb 15 Java/Android
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
Apr 13 Java/Android
详细介绍Java中的CyclicBarrier
Apr 13 Java/Android
Java由浅入深通关抽象类与接口(下篇)
Apr 26 Java/Android
Spring Data JPA框架Repository自定义实现
Apr 28 Java/Android
Android开发手册Chip监听及ChipGroup监听
Jun 10 Java/Android
SpringBoot使用ip2region获取地理位置信息的方法
Jun 21 Java/Android
Java服务调用RestTemplate与HttpClient的使用详解
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更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
php while循环控制的简单实例
2016/05/30 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
html数组字符串拼接的最快方法
2009/09/16 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
JavaScript获取两个数组交集的方法
2015/06/09 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
2016/10/28 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
2017/08/30 Javascript
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
Python中的闭包总结
2014/09/18 Python
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
Python实现微信翻译机器人的方法
2019/08/13 Python
windows下python安装pip方法详解
2020/02/10 Python
python3正则模块re的使用方法详解
2020/02/11 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
python线程池 ThreadPoolExecutor 的用法示例
2020/10/10 Python
法定代表人授权委托书范文
2014/08/02 职场文书
爱心捐书倡议书
2015/04/27 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
2015年乡镇工会工作总结
2015/05/19 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
详解MindSpore自定义模型损失函数
2021/06/30 Python