Files
VibeCoding/WebRTCSignalServer/src/main/java/com/ttstd/signaling/config/PublicEndpoints.java
TongTongStudio ded6fe5ab7 feat(android): add device activation flow and update dependencies
重构项目架构,引入启动页(SplashActivity)检查激活状态,未激活设备引导至激活页(ActivationActivity)完成provision+token流程。集成Retrofit+RxJava3网络层、Room数据库、Lifecycle组件、MMKV等依赖,升级OkHttp/Gson版本,并将构建配置从旧项目全面迁移至新项目结构。
2026-08-03 00:25:51 +08:00

66 lines
2.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.ttstd.signaling.config;
import jakarta.servlet.http.HttpServletRequest;
import java.util.Set;
/**
* 统一管理“无需鉴权即可访问”的端点。
*
* <p>所有免登录/免令牌的公开接口集中在此登记,避免各过滤器各自硬编码放行规则
* 导致遗漏或冲突(例如登录接口被误拦截返回 401
*
* <p>匹配规则:
* <ul>
* <li>{@link #EXACT} 中的精确路径(含任意 HTTP 方法)一律放行;</li>
* <li>{@link #PREFIXES} 中的前缀路径一律放行;</li>
* <li>OPTIONS 预检请求一律放行;</li>
* <li>其余路径交由对应鉴权过滤器处理。</li>
* </ul>
*/
public final class PublicEndpoints {
private PublicEndpoints() {
}
/** 精确免鉴权路径(不区分 HTTP 方法)。 */
public static final Set<String> EXACT = Set.of(
// 主控端用户体系
"/api/auth/register",
"/api/auth/login",
"/api/auth/refresh",
// 设备激活 / 设备令牌
"/api/device/provision",
"/api/device/token",
// 后台管理员:登录接口免鉴权(其余后台接口均需 admt_ 令牌)
"/api/admin/login",
// 后台健康检查(运维探针)
"/api/admin/health"
);
/** 免鉴权前缀。 */
public static final Set<String> PREFIXES = Set.of(
// WebSocket 握手前的公开信令协商路径(如有)
);
/** 判断请求是否免鉴权。 */
public static boolean isPublic(HttpServletRequest request) {
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
return true;
}
String path = request.getServletPath();
if (path == null) {
return false;
}
if (EXACT.contains(path)) {
return true;
}
for (String prefix : PREFIXES) {
if (path.startsWith(prefix)) {
return true;
}
}
return false;
}
}