package com.proxy.proxy.server.handler;
import com.proxy.proxy.proxy.ProxyServer;
import com.proxy.proxy.server.Server;
import com.proxy.proxy.util.ProtoUtil;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.*;
import io.netty.handler.codec.http.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.proxy.proxy.util.ProtoUtil.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
/**
* @ClassName: ServerHandler
* @Auther: CemB
* @Description:
* @Email: 729943791@qq.com
* @Company: 东方瑞云
* @Date: 2018/12/20 15:20
*/
//线程间共享,但必须要保证此类线程安全
@ChannelHandler.Sharable
public class ServerHandler extends ChannelInboundHandlerAdapter {
private final static Log LOG = LogFactory.getLog(ServerHandler.class);
//保证线程安全
private ThreadLocal<ChannelFuture> futureThreadLocal = new ThreadLocal<>();
private final AtomicInteger PORT = new AtomicInteger(0);
private final AtomicReference<String> HOST = new AtomicReference<String>("0.0.0.0");
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
LOG.info("服务器连接成功......");
}
@Override
public void channelRead(final ChannelHandlerContext ctx, final Object msg) {
//http
if (msg instanceof FullHttpRequest) {
FullHttpRequest request = (FullHttpRequest) msg;
String name = request.method().name();
RequestProto protoUtil = ProtoUtil.getRequestProto(request);
String host = protoUtil.getHost();
int port = protoUtil.getPort();
PORT.set(port);
HOST.set(host);
request.headers().set("11", "222");
if ("CONNECT".equalsIgnoreCase(name)) {//HTTPS建立代理握手
HttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, Server.SUCCESS);
ctx.writeAndFlush(response);
ctx.pipeline().remove("httpCodec");
ctx.pipeline().remove("httpObject");
return;
}
//开启代理服务器
new ProxyServer(host, port, msg, ctx.channel()).start();
} else { //https,只转发数据,不对数据做处理,所以不需要解密密文
ChannelFuture future = futureThreadLocal.get();
//代理连接还未建立
if (future == null) {
//连接至目标服务器
Bootstrap bootstrap = new Bootstrap();
bootstrap.group(ctx.channel().eventLoop()) // 复用客户端连接线程池
.channel(ctx.channel().getClass()) // 使用NioSocketChannel来作为连接用的channel类
.handler(new ChannelInitializer() {
@Override
protected void initChannel(Channel ch) throws Exception {
ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {
@Override
public void channelRead(ChannelHandlerContext ctx0, Object msg) throws Exception {
ctx.channel().writeAndFlush(msg);
}
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
System.out.println("https 代理服务器连接成功...");
}
});
}
});
future = bootstrap.connect(HOST.get(), PORT.get());
futureThreadLocal.set(future);
future.addListener(new ChannelFutureListener() {
public void operationComplete(ChannelFuture future) throws Exception {
if (future.isSuccess()) {
future.channel().writeAndFlush(msg);
} else {
ctx.channel().close();
}
}
});
} else {
//代理建立连接之后,直接刷回数据
future.channel().writeAndFlush(msg);
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
springboot集成netty实现代理服务器
共87个文件
xml:54个
class:16个
java:9个
需积分: 50 83 下载量 32 浏览量
2018-12-21
17:39:37
上传
评论 2
收藏 109KB ZIP 举报
温馨提示
springboot集成netty实现代理服务器,实现http和https请求的代理功能
资源推荐
资源详情
资源评论
收起资源包目录
proxy.zip (87个子文件)
proxy
.gitignore 268B
.mvn
wrapper
maven-wrapper.jar 47KB
maven-wrapper.properties 116B
src
main
resources
application.properties 35B
java
com
proxy
proxy
server
handler
ServerHandler.java 4KB
Server.java 2KB
ProxyApplication.java 319B
util
ProtoUtil.java 3KB
HeaderUtil.java 894B
proxy
handler
ProxyServerHandler.java 913B
ProxyServer.java 2KB
Runner.java 694B
test
java
com
proxy
proxy
ProxyApplicationTests.java 341B
mvnw 9KB
pom.xml 2KB
mvnw.cmd 6KB
target
classes
com
proxy
proxy
server
Server.class 2KB
handler
ServerHandler.class 5KB
ServerHandler$1$1.class 2KB
ServerHandler$2.class 2KB
ServerHandler$1.class 1KB
Server$1.class 2KB
Runner.class 856B
util
HeaderUtil.class 1KB
ProtoUtil.class 2KB
ProtoUtil$RequestProto.class 1KB
proxy
handler
ProxyServerHandler.class 1KB
ProxyServer.class 2KB
ProxyServer$2.class 1KB
ProxyServer$1.class 1KB
ProxyApplication.class 704B
application.properties 35B
generated-test-sources
test-annotations
generated-sources
annotations
test-classes
com
proxy
proxy
ProxyApplicationTests.class 623B
.idea
misc.xml 439B
encodings.xml 172B
libraries
Maven__net_bytebuddy_byte_buddy_1_9_5.xml 601B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_1_RELEASE.xml 806B
Maven__junit_junit_4_12.xml 527B
Maven__org_bouncycastle_bcprov_jdk15on_1_58.xml 634B
Maven__io_netty_netty_handler_4_1_31_Final.xml 651B
Maven__org_ow2_asm_asm_5_0_4.xml 544B
Maven__org_springframework_spring_jcl_5_1_3_RELEASE.xml 681B
Maven__org_skyscreamer_jsonassert_1_5_0.xml 609B
Maven__net_minidev_accessors_smart_1_2.xml 614B
Maven__org_springframework_boot_spring_boot_2_1_1_RELEASE.xml 708B
Maven__org_springframework_boot_spring_boot_starter_logging_2_1_1_RELEASE.xml 820B
Maven__net_bytebuddy_byte_buddy_agent_1_9_5.xml 643B
Maven__javax_annotation_javax_annotation_api_1_3_2.xml 683B
Maven__io_netty_netty_common_4_1_31_Final.xml 644B
Maven__org_springframework_spring_test_5_1_3_RELEASE.xml 688B
Maven__org_springframework_spring_aop_5_1_3_RELEASE.xml 681B
Maven__ch_qos_logback_logback_core_1_2_3.xml 619B
Maven__org_springframework_spring_context_5_1_3_RELEASE.xml 709B
Maven__io_netty_netty_codec_socks_4_1_31_Final.xml 679B
Maven__io_netty_netty_codec_http_4_1_31_Final.xml 672B
Maven__org_springframework_spring_beans_5_1_3_RELEASE.xml 695B
Maven__org_apache_logging_log4j_log4j_api_2_11_1.xml 645B
Maven__io_netty_netty_buffer_4_1_31_Final.xml 644B
Maven__org_objenesis_objenesis_2_6.xml 580B
Maven__org_springframework_spring_core_5_1_3_RELEASE.xml 688B
Maven__org_xmlunit_xmlunit_core_2_6_2.xml 607B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_1_RELEASE.xml 841B
Maven__net_minidev_json_smart_2_3.xml 579B
Maven__com_jayway_jsonpath_json_path_2_4_0.xml 618B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 772B
Maven__io_netty_netty_transport_4_1_31_Final.xml 665B
Maven__ch_qos_logback_logback_classic_1_2_3.xml 640B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_11_1.xml 680B
Maven__io_netty_netty_codec_4_1_31_Final.xml 637B
Maven__org_springframework_boot_spring_boot_test_2_1_1_RELEASE.xml 743B
Maven__org_mockito_mockito_core_2_23_4.xml 614B
Maven__org_hamcrest_hamcrest_core_1_3.xml 604B
Maven__org_slf4j_slf4j_api_1_7_25.xml 585B
Maven__org_springframework_boot_spring_boot_starter_2_1_1_RELEASE.xml 764B
Maven__org_assertj_assertj_core_3_11_1.xml 614B
Maven__org_hamcrest_hamcrest_library_1_3.xml 625B
Maven__org_slf4j_jul_to_slf4j_1_7_25.xml 606B
Maven__io_netty_netty_resolver_4_1_31_Final.xml 658B
Maven__org_springframework_spring_expression_5_1_3_RELEASE.xml 730B
Maven__org_springframework_boot_spring_boot_starter_test_2_1_1_RELEASE.xml 799B
Maven__org_yaml_snakeyaml_1_23.xml 567B
Maven__io_netty_netty_handler_proxy_4_1_31_Final.xml 693B
Maven__org_bouncycastle_bcpkix_jdk15on_1_58.xml 634B
workspace.xml 41KB
compiler.xml 622B
modules.xml 250B
proxy.iml 6KB
共 87 条
- 1
资源评论
与衫
- 粉丝: 272
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (176900230)基于ssm的图书馆管理系统
- WPA3 Specification v3.4
- (175875816)使用SSM技术开发的一个图书管理系统,包含数据库文件
- 颜色拾取,ColorCapture
- arm-gnu-toolchain-13.2.rel1-mingw-w64-i686-arm-none-eabi
- ChristmasStarsStyle.css
- c# WPF Modbus mvvm 应用
- 数据分析-05-确定关键行为+给渠道质量打分(包含代码和数据)
- 基于 Python 控制台的网络漏洞扫描器
- matlab simulink七自由度车辆模型,悬架具有主动控制力的七自由度整车模型 输入为路面不平度,输出车轮位置,车身位移,俯仰角,侧倾角等 参数可调 需要matlab2016a及以上版本
- 机械设计PCB板自动返修设备(包电控bom,程序,工程图) sw16可编辑非常好的设计图纸100%好用.zip
- Java毕业设计基于springboot的企业OA管理系统源码+数据库+说明文档
- 数据分析-06-游戏APP用户行为统计分析(包含代码和数据)
- Trading API eBaySDK-1379-JAVA
- Java毕业设计基于springboot的企业后台管理系统源码+数据库+说明文档
- 数据分析-07-2020年天气差异分析(了解天气差异的元凶 + 包含代码和数据)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功