From f79976b128dda90f51c57ba18417145cd5e49bf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=A3=BC=EC=9D=BC?= Date: Sun, 19 Jul 2026 09:07:16 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EA=B4=80=EB=A6=AC=EC=9E=90=20=EA=B2=8C?= =?UTF-8?q?=EC=8B=9C=ED=8C=90=20=EC=97=B0=EA=B4=80=EC=83=81=ED=92=88=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EB=B0=8F=20=EB=A1=9C=EC=BB=AC=20?= =?UTF-8?q?=EC=9D=B8=EC=A6=9D=20=EB=B3=B4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mngr/login/MngrLoginController.java | 7 ++-- .../mngr/MngrLoggingInterceptor.java | 4 +- .../com/wb/domainserver/util/CookieUtils.java | 37 +++++++++++++++++-- .../bbs/gnrlbbsctt/BOGnrlbbscttMapper.xml | 2 +- .../bbs/gnrlsctt/GnrlBbscttUpdtPopupU.jsp | 4 +- 5 files changed, 44 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/wb/domainserver/domain/mngr/login/MngrLoginController.java b/src/main/java/com/wb/domainserver/domain/mngr/login/MngrLoginController.java index 8d27e6e0..ce4ca58a 100644 --- a/src/main/java/com/wb/domainserver/domain/mngr/login/MngrLoginController.java +++ b/src/main/java/com/wb/domainserver/domain/mngr/login/MngrLoginController.java @@ -197,11 +197,12 @@ public class MngrLoginController { log.debug("리프레쉬 토큰이 없는 경우 realm :: {}", realm); //엑세스토큰 삭제 - CookieUtils.deleteCookie("ACT","/"+realm, request, response); - CookieUtils.deleteCookie("token_expire","/"+realm, request, response); + CookieUtils.deleteCookie("ACT","/", request, response); + CookieUtils.deleteCookie("RFT","/" + realm + "/tokens/refresh", request, response); + CookieUtils.deleteCookie("token_expire","/", request, response); response.sendRedirect("/"+realm); - + return; } //리프레쉬 토큰 있을 경우(존재한다는 자체가 refresh토큰이 만료된 상태가 아님) diff --git a/src/main/java/com/wb/domainserver/interceptor/mngr/MngrLoggingInterceptor.java b/src/main/java/com/wb/domainserver/interceptor/mngr/MngrLoggingInterceptor.java index d85dbd5e..4717cd66 100644 --- a/src/main/java/com/wb/domainserver/interceptor/mngr/MngrLoggingInterceptor.java +++ b/src/main/java/com/wb/domainserver/interceptor/mngr/MngrLoggingInterceptor.java @@ -371,7 +371,9 @@ public class MngrLoggingInterceptor implements HandlerInterceptor { String cookieValue = agentId + ":" + md5(agentId + ":" + md5(System.currentTimeMillis() + ":" + random.nextInt())).substring(5, 10); Cookie agentIdCookie = new Cookie("agent_id", cookieValue); agentIdCookie.setMaxAge(86400 * 365 * 10); // 10년 - agentIdCookie.setDomain(domain); + if (!request.getServerName().startsWith("loc.")) { + agentIdCookie.setDomain(domain); + } // agentIdCookie.setHttpOnly(true); agentIdCookie.setPath("/mngr"); // agentIdCookie.setSecure(true); diff --git a/src/main/java/com/wb/domainserver/util/CookieUtils.java b/src/main/java/com/wb/domainserver/util/CookieUtils.java index 4eecb700..89bc8f50 100644 --- a/src/main/java/com/wb/domainserver/util/CookieUtils.java +++ b/src/main/java/com/wb/domainserver/util/CookieUtils.java @@ -44,9 +44,12 @@ public abstract class CookieUtils { Cookie cookie = new Cookie(name, null); cookie.setMaxAge(0); cookie.setPath(path); - cookie.setDomain(originHost); + setCookieDomain(cookie, request, originHost); cookie.setHttpOnly(true); response.addCookie(cookie); + + // loc 환경에서는 이전에 상위 도메인으로 저장된 쿠키도 함께 삭제한다. + deleteLegacyDomainCookie(name, path, request, response, originHost); } public static void createCookie(String name, String value, String path, int maxAge, boolean httpOnly, HttpServletRequest request, HttpServletResponse response) { @@ -58,10 +61,12 @@ public abstract class CookieUtils { String originHost = UrlExtractor.getOriginalHost(host); + deleteLegacyDomainCookie(name, path, request, response, originHost); + Cookie cookie = new Cookie(name, value); cookie.setMaxAge(maxAge); cookie.setPath(path); - cookie.setDomain(originHost); + setCookieDomain(cookie, request, originHost); cookie.setHttpOnly(httpOnly); response.addCookie(cookie); } @@ -77,7 +82,7 @@ public abstract class CookieUtils { Cookie cookie = new Cookie(name, value); cookie.setPath(path); - cookie.setDomain(originHost); + setCookieDomain(cookie, request, originHost); cookie.setHttpOnly(httpOnly); response.addCookie(cookie); } @@ -96,4 +101,30 @@ public abstract class CookieUtils { return Map.of("ACTPath", ACTPath, "RFTPath", RFTPath); } + private static void setCookieDomain(Cookie cookie, HttpServletRequest request, String domain) { + if (!request.getServerName().startsWith("loc.")) { + cookie.setDomain(domain); + } + } + + private static void deleteLegacyDomainCookie(String name, String path, HttpServletRequest request, HttpServletResponse response, String domain) { + if (request.getServerName().startsWith("loc.")) { + addDomainDeleteCookie(name, path, domain, response); + + int firstDot = domain.indexOf('.'); + if (firstDot > 0) { + addDomainDeleteCookie(name, path, domain.substring(firstDot + 1), response); + } + } + } + + private static void addDomainDeleteCookie(String name, String path, String domain, HttpServletResponse response) { + Cookie domainCookie = new Cookie(name, null); + domainCookie.setMaxAge(0); + domainCookie.setPath(path); + domainCookie.setDomain(domain); + domainCookie.setHttpOnly(true); + response.addCookie(domainCookie); + } + } diff --git a/src/main/resources/mybatis/xml/mapper/gcone/bbs/gnrlbbsctt/BOGnrlbbscttMapper.xml b/src/main/resources/mybatis/xml/mapper/gcone/bbs/gnrlbbsctt/BOGnrlbbscttMapper.xml index 50845673..f0de3acf 100644 --- a/src/main/resources/mybatis/xml/mapper/gcone/bbs/gnrlbbsctt/BOGnrlbbscttMapper.xml +++ b/src/main/resources/mybatis/xml/mapper/gcone/bbs/gnrlbbsctt/BOGnrlbbscttMapper.xml @@ -2659,7 +2659,7 @@ AND FGI.IMG_KND = '02' AND FGI.CUT_NB = 1 LIMIT 1 - ) AS GOODS_IMG_COURS + ) AS IMG ,FG.GOODS_NM ,FG.GOODS_ICON_CD AS ICON_CD_NM_LIST ,FG.SRT_DC AS REPRSNT_DC diff --git a/src/main/webapp/WEB-INF/views/mngr/bbs/gnrlsctt/GnrlBbscttUpdtPopupU.jsp b/src/main/webapp/WEB-INF/views/mngr/bbs/gnrlsctt/GnrlBbscttUpdtPopupU.jsp index c7b2e5b5..d532a868 100644 --- a/src/main/webapp/WEB-INF/views/mngr/bbs/gnrlsctt/GnrlBbscttUpdtPopupU.jsp +++ b/src/main/webapp/WEB-INF/views/mngr/bbs/gnrlsctt/GnrlBbscttUpdtPopupU.jsp @@ -486,7 +486,7 @@ @@ -904,4 +904,4 @@ var inputElement = $('input[type="file"].dz-hidden-input'); inputElement.attr('name', 'files'); inputElement.attr('id', 'fileUploadDrop'); - \ No newline at end of file +