news 2026/8/25 1:47:06

Solon Web 的“分身术”:单应用多端口监听,化身多重服务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Solon Web 的“分身术”:单应用多端口监听,化身多重服务

一、概述

常规 Solon Web 应用通常采用单一端口提供服务。然而在实际业务场景中,我们往往需要单个应用具备"多面服务"能力:在不同端口上提供功能完全独立的服务模块。

典型应用场景:

外部 API 服务 + 内部监控端口:对外提供业务接口,对内提供运维监控

用户前台系统 + 管理后台系统:同一应用同时服务终端用户和运营管理

多租户隔离服务:不同端口服务不同客户群体,实现逻辑隔离

二、场景示例

以电商平台开发为例,我们需要在同一应用中集成:

服务类型 端口 核心功能

用户端服务 8082 商品浏览、购物车管理、订单处理

管理端服务 8083 商品管理、订单管理、数据统计

两套服务功能逻辑完全独立,但需要共享应用部署资源。

三、技术实现方案

采用多端口方式。多端口有个好处,不同端口可以采用不同的运维策略。

1. 多端口配置

配置主端口(app.yml):

server.port: 8082 #用户端服务

动态添加管理端口:

import org.noear.solon.Solon;

import org.noear.solon.annotation.SolonMain;

import org.noear.solon.server.http.HttpServerConfigure;

@SolonMain

public class App {

public static void main(String[] args) {

Solon.start(App.class, args, app -> {

app.onEvent(HttpServerConfigure.class, config -> {

config.addHttpPort(8083); // 添加管理端服务端口

});

});

}

}

2、端口级访问控制

通过过滤器实现基于端口的访问权限控制:

import org.noear.solon.annotation.Component;

import org.noear.solon.core.handle.Context;

import org.noear.solon.core.handle.Filter;

import org.noear.solon.core.handle.FilterChain;

@Component(index = -1) // 高优先级过滤器

public class PortBasedFilter implements Filter {

private static final int USER_PORT = 8082;

private static final int ADMIN_PORT = 8083;

@Override

public void doFilter(Context ctx, FilterChain chain) throws Throwable {

int currentPort = ctx.localPort();

if (currentPort == ADMIN_PORT) {

handleAdminRequest(ctx);

} else if (currentPort == USER_PORT) {

handleUserRequest(ctx);

} else {

ctx.status(403).output("Forbidden: Invalid access port");

return;

}

chain.doFilter(ctx);

}

private void handleUserRequest(Context ctx) {

// 用户端路径验证

if (!ctx.pathNew().startsWith("/api/user/")) {

ctx.status(401).output("Unauthorized: User API required");

return;

}

validateUserRequest(ctx);

}

private void handleAdminRequest(Context ctx) {

// 管理端路径验证

if (!ctx.pathNew().startsWith("/api/admin/")) {

ctx.status(401).output("Unauthorized: Admin API required");

return;

}

validateAdminRequest(ctx);

}

private void validateUserRequest(Context ctx) {

// 用户端请求验证逻辑

String userAgent = ctx.userAgent();

if (userAgent == null || userAgent.trim().isEmpty()) {

throw new SecurityException("Invalid user request: User-Agent required");

}

}

private void validateAdminRequest(Context ctx) {

// 管理端身份验证

String token = ctx.header("Authorization");

if (token == null || !token.startsWith("Bearer ")) {

throw new SecurityException("Admin authentication required");

}

// Token 验证逻辑

if (!isValidAdminToken(token.substring(7))) {

throw new SecurityException("Invalid admin token");

}

}

private boolean isValidAdminToken(String token) {

// 实现具体的 Token 验证逻辑

return token != null && token.length() > 10;

}

}

3、模块化控制器设计

用户端控制器:

import org.noear.solon.annotation.*;

@Controller

@Mapping("/api/user")

public class UserController {

@Get

@Mapping("/products")

public String getProducts() {

return "User Products API";

}

@Post

@Mapping("/cart")

public String addToCart() {

return "Add to cart";

}

@Get

@Mapping("/orders")

public String getOrders() {

return "User orders list";

}

}

管理端控制器:

import org.noear.solon.annotation.*;

@Controller

@Mapping("/api/admin")

public class AdminController {

@Get

@Mapping("/products")

public String manageProducts() {

return "Admin Products Management";

}

@Get

@Mapping("/statistics")

public String getStatistics() {

return "Admin Statistics Dashboard";

}

}

四、方案优势

资源复用:共享应用上下文,减少系统资源占用

部署简化:单一应用包包含多套服务功能

隔离性:端口级别的访问控制和业务逻辑隔离

灵活性:不同端口可采用独立的运维策略和安全配置

五、扩展建议

结合配置中心实现端口动态管理

集成监控组件,分别统计各端口服务指标

基于端口实现差异化的限流和熔断策略

该方案为复杂业务场景下的服务部署提供了灵活而高效的解决方案,既保证了服务间的逻辑隔离,又实现了资源的有效利用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 13:04:07

基于vue的培训机构课程报名教育管理系统_jzj3cqd0_springboot php python nodejs

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2026/8/23 13:14:20

基于vue的校园快递代取系统的设计与实现_3gshfal8_springboot php python nodejs

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2026/8/23 8:28:11

MLflow全球化部署终极指南:构建跨国机器学习协作平台

MLflow全球化部署终极指南:构建跨国机器学习协作平台 【免费下载链接】mlflow 一个关于机器学习工作流程的开源项目,适合对机器学习工作流程和平台开发感兴趣的人士学习和应用,内容包括数据集管理、模型训练、模型部署等多个方面。特点是功能…

作者头像 李华
网站建设 2026/8/23 20:44:11

基于vue的乡村旅游系统_家乡宣传系统nky846l2_springboot php python nodejs

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2026/8/24 6:09:57

UnrealCLR高效入门指南:3大核心技巧快速上手游戏开发

想要在Unreal Engine中使用C#开发游戏?这份终极指南将为你揭秘UnrealCLR项目的快速上手方法!UnrealCLR是一个强大的开源项目,它让.NET开发者能够直接在虚幻引擎中运行托管代码,实现C#与C的无缝协作。无论你是游戏开发新手还是经验…

作者头像 李华
网站建设 2026/8/24 9:35:27

Burp Suite Professional 2025.12 for Windows x64 - 领先的 Web 渗透测试软件

Burp Suite Professional 2025.12 for Windows x64 - 领先的 Web 渗透测试软件 世界排名第一的 Web 渗透测试工具包 请访问原文链接:https://sysin.org/blog/burp-suite-pro-win/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.o…

作者头像 李华