Files
VibeCoding/WebRTCSignalServer/src/main/java/com/ttstd/signaling/security/AuthException.java
tongtongstudio 6eb2c7321a feat(controlled): 实现设备激活与安全认证流程
- 添加API客户端、加密存储和provision/token激活逻辑
- WebSocket改用Bearer令牌认证,移除REGISTER请求
- 设备ID改为服务端下发,支持令牌刷新和强制下线处理
- 新增deviceSecret加密存储和accessToken自动刷新
- 更新设备ID获取方式为出厂SN,添加安全存储依赖
2026-08-01 15:13:12 +08:00

54 lines
1.8 KiB
Java

package com.ttstd.signaling.security;
/**
* 鉴权/账号相关业务异常。
*
* <p>{@code publicMessage} 是可返回给客户端的模糊提示,
* {@code detail} 仅用于服务端日志,避免向外泄露账号是否存在、设备是否在线等信息。
*/
public class AuthException extends RuntimeException {
private final int status;
private final String code;
private final String publicMessage;
public AuthException(int status, String code, String publicMessage) {
this(status, code, publicMessage, publicMessage);
}
public AuthException(int status, String code, String publicMessage, String detail) {
super(detail);
this.status = status;
this.code = code;
this.publicMessage = publicMessage;
}
public int getStatus() { return status; }
public String getCode() { return code; }
public String getPublicMessage() { return publicMessage; }
public static AuthException unauthorized(String detail) {
return new AuthException(401, "UNAUTHORIZED", "认证失败", detail);
}
public static AuthException forbidden(String publicMessage, String detail) {
return new AuthException(403, "FORBIDDEN", publicMessage, detail);
}
public static AuthException forbidden(String publicMessage) {
return new AuthException(403, "FORBIDDEN", publicMessage, publicMessage);
}
public static AuthException badRequest(String publicMessage) {
return new AuthException(400, "BAD_REQUEST", publicMessage);
}
public static AuthException notFound(String publicMessage) {
return new AuthException(404, "NOT_FOUND", publicMessage);
}
public static AuthException tooManyRequests(String publicMessage) {
return new AuthException(429, "TOO_MANY_REQUESTS", publicMessage);
}
}