feat(android): add device activation flow and update dependencies

重构项目架构,引入启动页(SplashActivity)检查激活状态,未激活设备引导至激活页(ActivationActivity)完成provision+token流程。集成Retrofit+RxJava3网络层、Room数据库、Lifecycle组件、MMKV等依赖,升级OkHttp/Gson版本,并将构建配置从旧项目全面迁移至新项目结构。
This commit is contained in:
TongTongStudio
2026-08-03 00:25:51 +08:00
parent 61398ff4ff
commit ded6fe5ab7
105 changed files with 5363 additions and 1503 deletions

View File

@@ -0,0 +1,65 @@
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;
}
}