Skip to content

Commit e47f7e3

Browse files
committed
fix: enable jwt
1 parent 2759e6a commit e47f7e3

File tree

2 files changed

+44
-9
lines changed

2 files changed

+44
-9
lines changed

backend/api-gateway/src/main/java/com/datamate/gateway/common/filter/AuthFilter.java

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,19 @@
2424
import java.nio.charset.StandardCharsets;
2525

2626
/**
27-
* 鉴权过滤器
27+
* 用户数据隔离过滤器
2828
*
29+
* 支持两种认证模式:
30+
* 1. SSO 模式:从 OmsAuthFilter 添加的 X-User-Name header 中提取用户信息
31+
* 2. JWT 模式:从 Authorization Bearer Token 中提取用户信息
32+
*
33+
* 无论哪种模式,最终都会添加 User header 供下游服务隔离用户数据
34+
*
35+
* 优先级:SSO > JWT
36+
* Order: 2 (低于 OmsAuthFilter 的 Order=1)
37+
*
38+
* @author songyongtan
39+
* @date 2026-03-30
2940
*/
3041
@Slf4j
3142
@Component
@@ -49,34 +60,55 @@ public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
4960
if (path.equals("/api/user/login") || path.equals("/api/user/signup")) {
5061
return chain.filter(exchange);
5162
}
63+
5264
try {
65+
// 优先检查 SSO 模式(OmsAuthFilter 已添加的 header)
66+
String ssoUser = request.getHeaders().getFirst("X-User-Name");
67+
if (StringUtils.isNotBlank(ssoUser)) {
68+
log.info("SSO mode detected, adding User header: {}", ssoUser);
69+
ServerHttpRequest mutatedRequest = request.mutate()
70+
.headers(httpHeaders -> {
71+
httpHeaders.add(USER_HEADER, ssoUser);
72+
})
73+
.build();
74+
ServerWebExchange mutatedExchange = exchange.mutate()
75+
.request(mutatedRequest)
76+
.build();
77+
return chain.filter(mutatedExchange);
78+
}
79+
80+
// 检查 JWT 模式
5381
if (!jwtEnable) {
82+
log.debug("JWT is disabled, passing request without user header");
5483
return chain.filter(exchange);
5584
}
56-
// Get token from Authorization header
85+
86+
// JWT 模式:验证 Token
5787
String authHeader = request.getHeaders().getFirst(AUTH_HEADER);
5888
if (authHeader == null || !authHeader.startsWith(TOKEN_PREFIX)) {
89+
log.warn("JWT enabled but no valid Authorization header found");
5990
return sendUnauthorizedResponse(exchange);
6091
}
92+
6193
String token = authHeader.substring(TOKEN_PREFIX.length());
6294
String user = userService.validateToken(token);
6395
if (StringUtils.isBlank(user)) {
96+
log.warn("JWT token validation failed");
6497
return sendUnauthorizedResponse(exchange);
6598
}
66-
// 4. 创建新的请求
99+
100+
log.info("JWT mode authenticated, adding User header: {}", user);
67101
ServerHttpRequest mutatedRequest = request.mutate()
68102
.headers(httpHeaders -> {
69-
// 或者直接操作headers
70103
httpHeaders.add(USER_HEADER, user);
71104
})
72105
.build();
73-
// 5. 使用新的请求创建新的exchange
74106
ServerWebExchange mutatedExchange = exchange.mutate()
75107
.request(mutatedRequest)
76108
.build();
77109
return chain.filter(mutatedExchange);
78110
} catch (Exception e) {
79-
log.error("get current user info error", e);
111+
log.error("Error in AuthFilter", e);
80112
return sendUnauthorizedResponse(exchange);
81113
}
82114
}
@@ -98,9 +130,12 @@ private Mono<Void> sendUnauthorizedResponse(ServerWebExchange exchange) {
98130
}
99131

100132
/**
101-
* JWT 认证优先级低于 SSO
133+
* 用户数据隔离过滤器优先级
134+
*
135+
* Order = 2,在 OmsAuthFilter (Order=1) 之后执行
136+
* 确保先执行 SSO 认证,再执行用户数据隔离
102137
*
103-
* @return order value (2 = lower priority than SSO filter)
138+
* @return order value (2 = after SSO authentication)
104139
*/
105140
@Override
106141
public int getOrder() {

deployment/helm/datamate/values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ backend:
121121
- name: datamate.rag.milvus-uri
122122
value: "http://milvus:19530"
123123
- name: datamate.jwt.enable
124-
value: &DATAMATE_JWT_ENABLE 'false'
124+
value: &DATAMATE_JWT_ENABLE 'true'
125125
volumes:
126126
- *datasetVolume
127127
- *flowVolume

0 commit comments

Comments
 (0)