Java应用如何实现劫持HTTP请求

  介绍

本篇文章给大家分享的是有关Java应用如何实现劫持HTTP请求,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

<强>背景

全链路追踪中,针对部分特殊的流量,希望将它引导到特定服务上(这个特定服务不在正常请求的链路上)——问题可以被抽象为解决进程间通信过程中目标进程的选择。

进程间通信方式很多,本篇只关注Java进程间套接字通信下HTTP形式的请求劫持,引导特定流量到特定进程。

<强>解决方案

可行的处理方案繁多。自顶向下从应用,框架,JVM,容器运行时,系统调用,网络协议栈等级别,均可着手解决。侵入性最强的操作就是要求所有业务应用都主动实现HTTP请求分流逻辑;次一级是提供二方库供业务应用主动集成;或者从系统层面进行改造,基于改写系统调用对请求进行劫持。

回顾两年前的所学,JVM TI为劫持HTTP请求提供了一个全新的解决思路。通过代理改写应用启动时加载的类的字节码,劫持类的实例并完成目标功能。

由于Java项目间调用大量的使用了Apache的HTTP客户端库,改写变得相当简单。识别流量,并对特定流量改写请求的主机即可。

<强>演示

由于HTTP客户端对所有请求目标都统一由<代码> org.apache.http。HttpHost 维护,控制变得极为简单,只需在<代码> HttpHost 实例化时,改写类的构造方法,即完成了对目标的劫持工作(下例中强制将所有请求指向<代码> 163. com>

 

将整个项目打包为代理。jar的过程不做太多介绍,详见ffutop/http-client-plugin

针对需要劫持的项目,在启动参数中增加<代码> - javaagent: $ {PATH_TO}/http-client-plugin。jar

以上就是Java应用如何实现劫持HTTP请求,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

Java应用如何实现劫持HTTP请求