From 5af633d251d532978afab77ae972fd5d222df034 Mon Sep 17 00:00:00 2001 From: gbpark Date: Sat, 25 Apr 2026 15:54:16 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B2=B4=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .../erp/provisioning/ProvisioningController.java | 12 +++--------- .../java/com/erp/tenant/ReservedSubdomains.java | 15 +++++++++++++++ .../com/erp/tenant/SubdomainResolverFilter.java | 2 +- 4 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 backend-spring/src/main/java/com/erp/tenant/ReservedSubdomains.java diff --git a/.gitignore b/.gitignore index 819367b0..f42ff16d 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ bin/ # Gradle .gradle/ +.gradle-cache/ **/backend/.gradle/ # Cache diff --git a/backend-spring/src/main/java/com/erp/provisioning/ProvisioningController.java b/backend-spring/src/main/java/com/erp/provisioning/ProvisioningController.java index 5dba9ffb..926d66ea 100644 --- a/backend-spring/src/main/java/com/erp/provisioning/ProvisioningController.java +++ b/backend-spring/src/main/java/com/erp/provisioning/ProvisioningController.java @@ -1,5 +1,6 @@ package com.erp.provisioning; +import com.erp.tenant.ReservedSubdomains; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -17,7 +18,6 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Set; /** * Phase 3-A 프로비저닝 API. @@ -48,12 +48,6 @@ public class ProvisioningController { @Value("${tenant.provisioning.require-super-admin:false}") private boolean requireSuperAdmin; - private static final Set RESERVED_SUBDOMAINS = Set.of( - "www", "admin", "api", "app", "static", "assets", - "main", "mail", "blog", "dev", "test", "staging", "prod", "console", - "solution" - ); - @GetMapping("/table-groups") public ResponseEntity>> tableGroups(HttpServletRequest request) { enforceSuperAdmin(request); @@ -91,7 +85,7 @@ public class ProvisioningController { Map sub = new LinkedHashMap<>(); sub.put("value", subdomain); sub.put("valid_format", formatOk); - sub.put("reserved", RESERVED_SUBDOMAINS.contains(subdomain)); + sub.put("reserved", ReservedSubdomains.VALUES.contains(subdomain)); sub.put("available", formatOk && !exists); sub.put("url_preview", subdomain + ".invyone.com"); result.put("subdomain", sub); @@ -242,7 +236,7 @@ public class ProvisioningController { private static boolean isValidSubdomain(String s) { return s != null && s.matches("^[a-z][a-z0-9-]{2,30}$") - && !RESERVED_SUBDOMAINS.contains(s); + && !ReservedSubdomains.VALUES.contains(s); } private static boolean isValidDbPrefix(String s) { diff --git a/backend-spring/src/main/java/com/erp/tenant/ReservedSubdomains.java b/backend-spring/src/main/java/com/erp/tenant/ReservedSubdomains.java new file mode 100644 index 00000000..7905c95b --- /dev/null +++ b/backend-spring/src/main/java/com/erp/tenant/ReservedSubdomains.java @@ -0,0 +1,15 @@ +package com.erp.tenant; + +import java.util.Set; + +public final class ReservedSubdomains { + + public static final Set VALUES = Set.of( + "www", "admin", "api", "app", "static", "assets", + "main", "mail", "blog", "dev", "test", "staging", "prod", "console", + "solution" + ); + + private ReservedSubdomains() { + } +} diff --git a/backend-spring/src/main/java/com/erp/tenant/SubdomainResolverFilter.java b/backend-spring/src/main/java/com/erp/tenant/SubdomainResolverFilter.java index f64505ec..425442f2 100644 --- a/backend-spring/src/main/java/com/erp/tenant/SubdomainResolverFilter.java +++ b/backend-spring/src/main/java/com/erp/tenant/SubdomainResolverFilter.java @@ -102,7 +102,7 @@ public class SubdomainResolverFilter extends OncePerRequestFilter { if (parts.length < 3) return null; // invyone.com (2파트) → null String first = parts[0]; - if ("www".equals(first) || "admin".equals(first)) return null; + if (ReservedSubdomains.VALUES.contains(first)) return null; return first; }