feat(sso): strip owner prefix in roleKey; expose /sso/casdoor/config; casdoor env passthrough
CodeQL Advanced / Analyze (actions) (push) Canceled after 0s
CodeQL Advanced / Analyze (java-kotlin) (push) Canceled after 0s
CodeQL Advanced / Analyze (javascript-typescript) (push) Canceled after 0s
CodeQL Advanced / Analyze (python) (push) Canceled after 0s
Docker Image Build & Push / manifest (push) Canceled after 0s
Docker Image Build & Push / manifest (push) Canceled after 0s
Docker Image Build & Push / build-and-push-arm (push) Canceled after 0s
Docker Image Build & Push / build-and-push-amd (push) Canceled after 0s
Docker Image Build & Push / build-and-push-arm (push) Canceled after 0s
Docker Image Build & Push / build-and-push-amd (push) Canceled after 0s
Frontend Docker Image CI / Build and Push Frontend Docker Image (push) Canceled after 0s
Gateway Docker Image CI / Build and Push Gateway Docker Image (push) Canceled after 0s

- RoleResolver.roleKey 取组名最后一段再匹配前缀,兼容 Casdoor user.groups 的 owner/name 全 ID
- 前端 nginx 增加精确 location /sso/casdoor/config 转发网关
- docker-compose 网关服务透传 DEEPDATA_CASDOOR_* 环境变量(Spring relaxed binding)
This commit is contained in:
apescale
2026-08-31 11:37:23 +08:00
parent c9df36be90
commit 9b2ce37ceb
3 changed files with 24 additions and 0 deletions
@@ -79,12 +79,19 @@ public class RoleResolver {
/**
* 组名 → 角色键:命中前缀返回后缀小写(如 deepdata-admin → admin),否则 null。
* 前缀为空时按整名小写匹配(兼容 group-prefix 留空的自定义组名)。
*
* <p>Casdoor 的 user.groups 存的是 {@code owner/name} 全 ID(如 {@code built-in/deepdata-admin}),
* 开启 useGroupPathInToken 时更可能是多级组路径;统一取最后一段作为组名再匹配。
*/
private String roleKey(String group, String prefix) {
if (group == null || group.isBlank()) {
return null;
}
String g = group.trim();
int slash = g.lastIndexOf('/');
if (slash >= 0) {
g = g.substring(slash + 1);
}
if (prefix.isEmpty()) {
return g.toLowerCase(Locale.ROOT);
}
@@ -71,6 +71,15 @@ services:
- JWT_SECRET=${JWT_SECRET:-}
- DB_PASSWORD=${DB_PASSWORD:?DB_PASSWORD is required. Set in .env file}
- deepdata.jwt.enable=${DEEPDATA_JWT_ENABLE:-false}
# ---- Casdoor SSO(M1/M2):空值保持 Spring 默认;生产经 .env 注入 ----
- DEEPDATA_CASDOOR_ENABLED=${DEEPDATA_CASDOOR_ENABLED:-false}
- DEEPDATA_CASDOOR_ISSUER=${DEEPDATA_CASDOOR_ISSUER:-}
- DEEPDATA_CASDOOR_AUTHORIZEURI=${DEEPDATA_CASDOOR_AUTHORIZE_URI:-}
- DEEPDATA_CASDOOR_TOKENURI=${DEEPDATA_CASDOOR_TOKEN_URI:-}
- DEEPDATA_CASDOOR_JWKSURI=${DEEPDATA_CASDOOR_JWKS_URI:-}
- DEEPDATA_CASDOOR_CLIENTID=${DEEPDATA_CASDOOR_CLIENT_ID:-}
- DEEPDATA_CASDOOR_CLIENTSECRET=${DEEPDATA_CASDOOR_CLIENT_SECRET:-}
- DEEPDATA_CASDOOR_REDIRECTURI=${DEEPDATA_CASDOOR_REDIRECT_URI:-}
- LOG_ROTATION_MAX_SIZE=${LOG_ROTATION_MAX_SIZE:-100MB}
- LOG_ROTATION_BACKUP_COUNT=${LOG_ROTATION_BACKUP_COUNT:-30}
volumes:
+8
View File
@@ -29,6 +29,14 @@ location /deepflow-backend {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# Casdoor SSO 前端配置端点(无 /api 前缀,供登录弹窗探测 SSO 是否启用)
location = /sso/casdoor/config {
proxy_pass http://deepdata-gateway:8080/sso/casdoor/config;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location @static_fallback {
root /opt/frontend/statics;
try_files $uri $uri/ /index.html;