我来详细分析这段Java WebSocket握手拦截代码:

1. Pattern.compile("/ws/print/progress/([^/]+)") 的含义

这是一个正则表达式,用于匹配和提取WebSocket连接路径中的参数:

  • /ws/print/progress/ - 固定的路径前缀

  • ([^/]+) - 捕获组,匹配一个或多个非斜杠字符

    • [^/] - 匹配任何不是斜杠的字符

    • + - 表示一个或多个

    • 括号()表示这是一个捕获组,可以被后续提取

示例匹配:

  • /ws/print/progress/123 → 匹配,提取"123"

  • /ws/print/progress/abc-xyz → 匹配,提取"abc-xyz"

  • /ws/print/progress/123/ → 不匹配(末尾有斜杠)

  • /ws/print/progress/ → 不匹配(缺少参数)

2. matcher.group(1) 参数为1的原因

在正则表达式中,group(0) 返回整个匹配的字符串,而 group(1) 返回第一个捕获组的内容:

java

// 假设路径是:/ws/print/progress/request123
matcher.group(0) // 返回 "/ws/print/progress/request123"(整个匹配)
matcher.group(1) // 返回 "request123"(第一个捕获组)

分组编号规则:

  • group(0) - 整个正则表达式匹配的内容

  • group(1) - 第一个括号捕获组的内容

  • group(2) - 第二个括号捕获组的内容(如果有的话)

代码功能总结

这段代码在WebSocket握手前执行,用于:

  1. 验证连接路径是否符合预期格式

  2. 从URL路径中提取请求ID(如request123

  3. 将提取的requestId存入attributes,供后续WebSocket会话使用

这种模式常用于REST风格的WebSocket端点,通过URL路径传递参数而不是查询参数。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐