feat(添加了ssl支持): 4.2.9.16 添加SSL支持
2025-09-21-1
This commit is contained in:
parent
c14d77400d
commit
67f4513817
27
.github/workflows/build-and-release.yml
vendored
27
.github/workflows/build-and-release.yml
vendored
|
|
@ -3,16 +3,13 @@ name: Build and Release
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- "rebuild-develop" # develop分支
|
- "rebuild-develop" # develop 分支只构建
|
||||||
- "rebuild-release" # release 分支
|
- "rebuild-release" # release 分支构建 + 发布
|
||||||
tags:
|
|
||||||
- 'build-*' # 打 tag 时跑 build + release
|
|
||||||
workflow_dispatch: # 允许手动触发
|
workflow_dispatch: # 允许手动触发
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
|
@ -44,40 +41,38 @@ jobs:
|
||||||
release:
|
release:
|
||||||
needs: build
|
needs: build
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: startsWith(github.ref, 'refs/tags/build-') # 只有打 tag 才执行 release
|
if: github.ref_name == 'rebuild-release' # 仅在 release 分支执行 release job
|
||||||
steps:
|
steps:
|
||||||
# 下载 Common JAR
|
# 下载构建产物
|
||||||
- name: Download Common artifact
|
- name: Download Common artifact
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: Common
|
name: Common
|
||||||
path: ./build-artifacts/Common
|
path: ./build-artifacts/Common
|
||||||
|
|
||||||
# 下载 CommonApi JAR
|
|
||||||
- name: Download CommonApi artifact
|
- name: Download CommonApi artifact
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: CommonApi
|
name: CommonApi
|
||||||
path: ./build-artifacts/CommonApi
|
path: ./build-artifacts/CommonApi
|
||||||
|
|
||||||
# 创建 Release
|
# 创建 GitHub Release
|
||||||
- name: Create GitHub Release
|
- name: Create GitHub Release
|
||||||
id: create_release
|
id: create_release
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
with:
|
with:
|
||||||
tag_name: ${{ github.ref_name }}
|
tag_name: "release-${{ github.run_number }}" # 可用 run_number 或自定义版本号
|
||||||
name: Release ${{ github.ref_name }}
|
name: Release ${{ github.run_number }}
|
||||||
body: |
|
body: 自动发布所有子项目构建产物
|
||||||
自动发布所有子项目构建产物。
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
# 上传各子项目 JAR 到 Release
|
# 上传子项目 JAR
|
||||||
- name: Upload jars to Release separately
|
- name: Upload jars to Release
|
||||||
run: |
|
run: |
|
||||||
for file in ./build-artifacts/**/*.jar; do
|
for file in ./build-artifacts/**/*.jar; do
|
||||||
echo "Uploading $file"
|
echo "Uploading $file"
|
||||||
gh release upload "${GITHUB_REF_NAME}" "$file" --repo "${GITHUB_REPOSITORY}" --clobber
|
gh release upload "release-${GITHUB_RUN_NUMBER}" "$file" --repo "${GITHUB_REPOSITORY}" --clobber
|
||||||
done
|
done
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
|
||||||
|
|
@ -32,9 +32,15 @@ import io.netty.handler.codec.http.websocketx.WebSocketClientHandshakerFactory;
|
||||||
import io.netty.handler.codec.http.websocketx.WebSocketClientProtocolHandler;
|
import io.netty.handler.codec.http.websocketx.WebSocketClientProtocolHandler;
|
||||||
import io.netty.handler.codec.http.websocketx.WebSocketFrameAggregator;
|
import io.netty.handler.codec.http.websocketx.WebSocketFrameAggregator;
|
||||||
import io.netty.handler.codec.http.websocketx.WebSocketVersion;
|
import io.netty.handler.codec.http.websocketx.WebSocketVersion;
|
||||||
|
import io.netty.handler.ssl.SslContext;
|
||||||
|
import io.netty.handler.ssl.SslContextBuilder;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import javax.net.ssl.SSLException;
|
||||||
|
import java.io.File;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
|
|
@ -56,6 +62,38 @@ public abstract class AbstractWebSocketClient {
|
||||||
* 端口
|
* 端口
|
||||||
*/
|
*/
|
||||||
protected volatile int Port;
|
protected volatile int Port;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 启用 SSL
|
||||||
|
*/
|
||||||
|
public void enableSSL() {
|
||||||
|
enableSSL(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 启用 SSL
|
||||||
|
* @param certFile 可选证书文件
|
||||||
|
*/
|
||||||
|
public void enableSSL(@Nullable File certFile) {
|
||||||
|
this.SslEnabled = true;
|
||||||
|
this.CertFile = certFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 禁用SSL
|
||||||
|
*/
|
||||||
|
public void disableSSL() {
|
||||||
|
this.SslEnabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否启用 SSL
|
||||||
|
*/
|
||||||
|
boolean SslEnabled;
|
||||||
|
/**
|
||||||
|
* 客户端可选信任证书
|
||||||
|
*/
|
||||||
|
File CertFile;
|
||||||
/**
|
/**
|
||||||
* 客户端启动类
|
* 客户端启动类
|
||||||
*/
|
*/
|
||||||
|
|
@ -84,6 +122,14 @@ public abstract class AbstractWebSocketClient {
|
||||||
return this.ClientStatus;
|
return this.ClientStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否启用 SSL
|
||||||
|
*
|
||||||
|
* @return enable
|
||||||
|
*/
|
||||||
|
public boolean isSslEnabled() {
|
||||||
|
return this.SslEnabled;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Sets status.
|
* Sets status.
|
||||||
*
|
*
|
||||||
|
|
@ -213,8 +259,21 @@ public abstract class AbstractWebSocketClient {
|
||||||
ClientBootstrap.channel(NioSocketChannel.class);
|
ClientBootstrap.channel(NioSocketChannel.class);
|
||||||
ClientBootstrap.handler(new ChannelInitializer<NioSocketChannel>() {
|
ClientBootstrap.handler(new ChannelInitializer<NioSocketChannel>() {
|
||||||
@Override
|
@Override
|
||||||
protected void initChannel(NioSocketChannel ch) {
|
protected void initChannel(NioSocketChannel ch) throws SSLException {
|
||||||
ChannelPipeline pipeline = ch.pipeline();
|
ChannelPipeline pipeline = ch.pipeline();
|
||||||
|
// SSL 支持
|
||||||
|
if (SslEnabled) {
|
||||||
|
SslContext sslCtx;
|
||||||
|
if (CertFile != null && CertFile.exists()) {
|
||||||
|
sslCtx = SslContextBuilder.forClient()
|
||||||
|
.trustManager(CertFile)
|
||||||
|
.build();
|
||||||
|
} else {
|
||||||
|
// 默认信任所有受信任的 CA
|
||||||
|
sslCtx = SslContextBuilder.forClient().build();
|
||||||
|
}
|
||||||
|
pipeline.addFirst(sslCtx.newHandler(ch.alloc(), Address, Port));
|
||||||
|
}
|
||||||
pipeline.addLast(DgLab.LOGGING_HANDLER,
|
pipeline.addLast(DgLab.LOGGING_HANDLER,
|
||||||
new HttpClientCodec(),
|
new HttpClientCodec(),
|
||||||
new HttpObjectAggregator(65536),
|
new HttpObjectAggregator(65536),
|
||||||
|
|
|
||||||
|
|
@ -31,9 +31,14 @@ import io.netty.handler.codec.http.HttpObjectAggregator;
|
||||||
import io.netty.handler.codec.http.HttpServerCodec;
|
import io.netty.handler.codec.http.HttpServerCodec;
|
||||||
import io.netty.handler.codec.http.websocketx.WebSocketFrameAggregator;
|
import io.netty.handler.codec.http.websocketx.WebSocketFrameAggregator;
|
||||||
import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;
|
import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;
|
||||||
|
import io.netty.handler.ssl.SslContext;
|
||||||
|
import io.netty.handler.ssl.SslContextBuilder;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import javax.net.ssl.SSLException;
|
||||||
|
import java.io.File;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -47,6 +52,21 @@ public abstract class AbstractWebSocketServer {
|
||||||
*/
|
*/
|
||||||
protected static final Logger logger = LoggerFactory.getLogger(AbstractWebSocketServer.class);
|
protected static final Logger logger = LoggerFactory.getLogger(AbstractWebSocketServer.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should enable SSL
|
||||||
|
*/
|
||||||
|
boolean SslEnabled;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cert File
|
||||||
|
*/
|
||||||
|
File CertFile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Key File
|
||||||
|
*/
|
||||||
|
File KeyFile;
|
||||||
|
|
||||||
private int Port;
|
private int Port;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -131,6 +151,33 @@ public abstract class AbstractWebSocketServer {
|
||||||
return Port;
|
return Port;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取SSL是否开启
|
||||||
|
*
|
||||||
|
* @return enable
|
||||||
|
*/
|
||||||
|
public boolean isSSLEnabled() {
|
||||||
|
return SslEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 启用SSL
|
||||||
|
* @param certFile 证书文件
|
||||||
|
* @param keyFile 私钥文件
|
||||||
|
*/
|
||||||
|
public void enableSSL(@NotNull File certFile, @NotNull File keyFile) {
|
||||||
|
this.SslEnabled = true;
|
||||||
|
this.CertFile = certFile;
|
||||||
|
this.KeyFile = keyFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 禁用SSL
|
||||||
|
*/
|
||||||
|
public void disableSSL() {
|
||||||
|
this.SslEnabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 提供实现此处添加对Message处理Handler
|
* 提供实现此处添加对Message处理Handler
|
||||||
*
|
*
|
||||||
|
|
@ -159,8 +206,13 @@ public abstract class AbstractWebSocketServer {
|
||||||
ServerBootstrap.channel(NioServerSocketChannel.class);
|
ServerBootstrap.channel(NioServerSocketChannel.class);
|
||||||
ServerBootstrap.childHandler(new ChannelInitializer<NioSocketChannel>() {
|
ServerBootstrap.childHandler(new ChannelInitializer<NioSocketChannel>() {
|
||||||
@Override
|
@Override
|
||||||
protected void initChannel(NioSocketChannel ch) {
|
protected void initChannel(NioSocketChannel ch) throws SSLException {
|
||||||
ChannelPipeline pipeline = ch.pipeline();
|
ChannelPipeline pipeline = ch.pipeline();
|
||||||
|
// 根据配置启用 SSL
|
||||||
|
if (SslEnabled) {
|
||||||
|
SslContext sslCtx = SslContextBuilder.forServer(CertFile, KeyFile).build();
|
||||||
|
pipeline.addFirst(sslCtx.newHandler(ch.alloc()));
|
||||||
|
}
|
||||||
pipeline.addLast(DgLab.LOGGING_HANDLER);
|
pipeline.addLast(DgLab.LOGGING_HANDLER);
|
||||||
pipeline.addLast(new HttpServerCodec());
|
pipeline.addLast(new HttpServerCodec());
|
||||||
pipeline.addLast(new HttpObjectAggregator(65536));
|
pipeline.addLast(new HttpObjectAggregator(65536));
|
||||||
|
|
@ -176,7 +228,7 @@ public abstract class AbstractWebSocketServer {
|
||||||
ServerChannel = channelFuture.channel();
|
ServerChannel = channelFuture.channel();
|
||||||
ServerStatus = Status.RUNNING;
|
ServerStatus = Status.RUNNING;
|
||||||
started();
|
started();
|
||||||
logger.info("WebSocketServer start on the port of {}", Port);
|
logger.info("WebSocketServer start on the port of {}{}", Port, SslEnabled ? " (SSL)" : "");
|
||||||
logger.debug("WebSocketServer listening on port {}", Port);
|
logger.debug("WebSocketServer listening on port {}", Port);
|
||||||
channelFuture.channel().closeFuture().sync();
|
channelFuture.channel().closeFuture().sync();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ org.gradle.configuration-cache=true
|
||||||
org.gradle.configuration-cache.problems=warn
|
org.gradle.configuration-cache.problems=warn
|
||||||
# ROOT
|
# ROOT
|
||||||
project_name=DgLab
|
project_name=DgLab
|
||||||
project_version=4.2.8.16
|
project_version=4.2.9.16
|
||||||
project_group=top.r3944realms.dg_lab
|
project_group=top.r3944realms.dg_lab
|
||||||
|
|
||||||
# API
|
# API
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,10 @@
|
||||||
统一用4位版本,对于测试性更新统一在其后加-Beta。
|
统一用4位版本,对于测试性更新统一在其后加-Beta。
|
||||||
修复问题更新为加0.0.0.1,添加/移除新特性加0.0.1.0,小部分重构更新加0.1.0.0,大量重构加1.0.0.0
|
修复问题更新为加0.0.0.1,添加/移除新特性加0.0.1.0,小部分重构更新加0.1.0.0,大量重构加1.0.0.0
|
||||||
|
|
||||||
|
2025-09-21-1
|
||||||
|
project_version=4.2.9.16
|
||||||
|
* 添加了SSL支持
|
||||||
|
|
||||||
2025-09-13-1
|
2025-09-13-1
|
||||||
project_version=4.2.8.16
|
project_version=4.2.8.16
|
||||||
* 重构项目结构
|
* 重构项目结构
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user