From a0a9a90b8ec5b657c8fb09cad4f36d2d559cb720 Mon Sep 17 00:00:00 2001 From: KNKIM Date: Mon, 18 Oct 2021 11:20:29 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=B5=EC=A7=80=EC=82=AC=ED=95=AD/QnA=20:=20?= =?UTF-8?q?=EB=AC=B8=ED=99=94=EC=9B=90=EB=B3=84=20=ED=91=9C=EC=B6=9C=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC,=20=EC=B9=B4=ED=8A=B8=20=EB=A8=B8=EC=A7=95?= =?UTF-8?q?=20:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=B0=8F=20=EB=B3=B4?= =?UTF-8?q?=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/nlib/col/service/CartService.java | 12 ++ .../col/service/impl/CartServiceImpl.java | 44 ++++- .../java/nlib/col/web/CartController.java | 25 ++- .../java/nlib/user/web/LoginController.java | 40 +++-- src/main/resources/nlib/nlib.properties | 10 ++ .../WEB-INF/jsp/nlib/cart/listCartItems.jsp | 9 + .../WEB-INF/jsp/nlib/login/loginPreSet.jsp | 8 +- .../WEB-INF/jsp/nlib/rent/listRentItems.jsp | 154 ++++++++++-------- 8 files changed, 197 insertions(+), 105 deletions(-) diff --git a/src/main/java/nlib/col/service/CartService.java b/src/main/java/nlib/col/service/CartService.java index 2fafd9a1..114663f4 100644 --- a/src/main/java/nlib/col/service/CartService.java +++ b/src/main/java/nlib/col/service/CartService.java @@ -93,5 +93,17 @@ public interface CartService * @throws Exception */ public int saveCartItemsOfNonMember(String mbInfoId, HttpServletRequest request) throws Exception; + + /** + * 쿠키 카트(비로그인 상태의 카트정보) 존재하는 경우, 해당 사용자 카트(DB)로 등록한 후, 쿠키 카트 삭제한다. + * + * @param mbInfoId + * @param request + * @param response + * @return + * @throws Exception + */ + public int mergeCart(String mbInfoId, HttpServletRequest request, HttpServletResponse response) throws Exception; + } \ No newline at end of file diff --git a/src/main/java/nlib/col/service/impl/CartServiceImpl.java b/src/main/java/nlib/col/service/impl/CartServiceImpl.java index 285f6655..299ed57d 100644 --- a/src/main/java/nlib/col/service/impl/CartServiceImpl.java +++ b/src/main/java/nlib/col/service/impl/CartServiceImpl.java @@ -12,6 +12,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import nlib.cmm.service.NlibProperty; import nlib.col.service.CartCookieVO; import nlib.col.service.CartService; import nlib.col.service.CollectionService; @@ -46,7 +47,7 @@ public class CartServiceImpl implements CartService private static final Logger log = LoggerFactory.getLogger(CartServiceImpl.class); // 비로그인회원의 카트정보 쿠키명 - public static final String CART_COOKIE_NAME = "_NLIB_COOKIE"; + public static final String CART_COOKIE_NAME = NlibProperty.getString("cart.cookie.name"); @Resource(name="cartDAO") @@ -71,17 +72,17 @@ public class CartServiceImpl implements CartService * (비로그인자용) 쿠키에서 카트 목록을 조회한다. * * @param request - * @param cartDivCd + * @param cartTypeCd * @return * @throws Exception */ - public List listCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, String cartDivCd) throws Exception { + public List listCartItemsFromCookie(HttpServletRequest request, HttpServletResponse response, String cartTypeCd) throws Exception { Cookie[] cookies = request.getCookies(); if(cookies == null || cookies.length < 1) return null; List list = new ArrayList(); - String targetCookieName = CART_COOKIE_NAME + (cartDivCd == null || cartDivCd.equals("0") ? "" : cartDivCd); + String targetCookieName = CART_COOKIE_NAME + (cartTypeCd == null || cartTypeCd.equals("0") ? "" : cartTypeCd); for(Cookie cookie : cookies) { String cookieName = cookie.getName(); @@ -287,6 +288,8 @@ public class CartServiceImpl implements CartService */ public void setCookie(HttpServletResponse response, String name, String value) { Cookie cookie = new Cookie(name, value); + cookie.setDomain(NlibProperty.getString("cart.cookie.domain")); + cookie.setPath(NlibProperty.getString("cart.cookie.path")); response.addCookie(cookie); } @@ -534,4 +537,37 @@ public class CartServiceImpl implements CartService return 0; } + /** + * 쿠키 카트(비로그인 상태의 카트정보) 존재하는 경우, 해당 사용자 카트(DB)로 등록한 후, 쿠키 카트 삭제한다. + * + * @param request + * @param response + * @return + * @throws Exception + */ + public int mergeCart(String mbInfoId, HttpServletRequest request, HttpServletResponse response) throws Exception { + + // 대출 카트 + String cartTypeCds[] = {"1", "2"}; + int mergeCnt = 0; + + for(String cartTypeCd : cartTypeCds) { + List list = listCartItemsFromCookie(request, response, cartTypeCd); + if(list == null || list.size() < 1) continue; + + for(CollectionVO item : list) { + item.setCartTypeCd(cartTypeCd); + item.setMbInfoId(mbInfoId); + item.setRegId(mbInfoId); + if(insertCartItem(item) != null) continue; + mergeCnt++; + } + } + + // 쿠키 카트 정보 초기화 + setCookieCart(response, new CartCookieVO()); + + return mergeCnt; + } + } diff --git a/src/main/java/nlib/col/web/CartController.java b/src/main/java/nlib/col/web/CartController.java index 6994f4b6..c2aa5582 100644 --- a/src/main/java/nlib/col/web/CartController.java +++ b/src/main/java/nlib/col/web/CartController.java @@ -72,7 +72,7 @@ public class CartController extends NlibCommonController * @return * @throws Exception */ - @RequestMapping("/cart/listCartItems.do") + @RequestMapping(value= {"/cart/listCartItems.do", "/login/listCartItems.do"}) public String listCartItems(HttpServletRequest request, HttpServletResponse response, String message, String cartTypeCd, ModelMap model) throws Exception { if(StringUtil.isEmpty(cartTypeCd)) cartTypeCd = "1"; // 대출 기본 설정 @@ -267,22 +267,19 @@ public class CartController extends NlibCommonController * @return * @throws Exception */ - @RequestMapping("/cart/saveCartItemsOfNonMemberAjax") - public String saveCartItemsOfNonMemberAjax(HttpServletRequest request, ModelMap model) throws Exception { + @RequestMapping("/cart/mergeCartItemsAjax.do") + public ResponseEntity mergeCartItemsAjax(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { - String message = null; - String mbInfoId = getMbInfoId(request); - int resultCnt = 0; - if(StringUtil.isEmpty(mbInfoId)) { - message = "잘못된 접근입니다. 로그인 후, 이용가능합니다."; - } else { - resultCnt = cartService.saveCartItemsOfNonMember(mbInfoId, request); - } + String mbInfoId = getMbInfoId(request); + int mergedCnt = 0; - model.addAttribute("message", message); - model.addAttribute("resultCnt", resultCnt); + if(StringUtil.isEmpty(mbInfoId)) mergedCnt = -1; + else mergedCnt = cartService.mergeCart(mbInfoId, request, response); - return "nlib/col/saveCartItemsOfNonMember"; + HashMap retMap = new HashMap(); + retMap.put("mergedCnt", mergedCnt); + + return makeResponseEntityJson(retMap); } } \ No newline at end of file diff --git a/src/main/java/nlib/user/web/LoginController.java b/src/main/java/nlib/user/web/LoginController.java index e1631ba1..4d92504b 100644 --- a/src/main/java/nlib/user/web/LoginController.java +++ b/src/main/java/nlib/user/web/LoginController.java @@ -2,6 +2,7 @@ package nlib.user.web; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.annotation.Resource; @@ -10,7 +11,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.web.savedrequest.HttpSessionRequestCache; @@ -21,7 +21,6 @@ import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; @@ -29,8 +28,11 @@ import egovframework.com.ext.oauth.service.OAuthConfig; import egovframework.com.ext.oauth.service.OAuthLogin; import egovframework.com.ext.oauth.service.OAuthUniversalUser; import egovframework.com.ext.oauth.service.OAuthVO; +import nlib.cmm.NlibCommonController; import nlib.cmm.service.NlibProperty; import nlib.cmm.session.SessionConfig; +import nlib.col.service.CartService; +import nlib.col.service.CollectionVO; import nlib.user.service.LoginService; import nlib.user.service.NlibLoginVO; import nlib.util.StringUtil; @@ -61,7 +63,7 @@ import nlib.util.StringUtil; * */ @Controller -public class LoginController { +public class LoginController extends NlibCommonController { public LoginController() { super(); @@ -87,7 +89,10 @@ public class LoginController { @Resource(name = "loginService") private LoginService loginService; - + @Resource(name = "cartService") + private CartService cartService; + + /** * 각 지방문화원 사이트에서 로그인을 위해서 최초 접속한다. * 지방문화원 정보를 확인하여 로그인처리가 진행될 수 있도록 한다. @@ -355,6 +360,7 @@ public class LoginController { model.addAttribute("message", StringUtil.encodeUrl("먼저 회원가입하신 후, 이용하여 주시기 바랍니다.")); return "nlib/login/loginPreSet"; } + //----------------------------------------------- // 해당 처리기로 전환 //----------------------------------------------- @@ -376,28 +382,32 @@ public class LoginController { * ID, PW를 입력받아 로그인을 처리한다. * (스프링 시큐리티 로그인 수행) * - * @param req - * @param res + * @param request + * @param response * @param username * @param password * @param model * @return */ @RequestMapping("/login/login.do") - public String login(HttpServletRequest req, HttpServletResponse res, + public String login(HttpServletRequest request, HttpServletResponse response, @RequestParam(required = false) String username, @RequestParam(required = false) String password, - ModelMap model) { + ModelMap model) throws Exception { - String loginResult = loginService.login(req, username, password); + String loginResult = loginService.login(request, username, password); String redirectUrl = NlibProperty.getString("home.uri"); // 정상적으로 로그인된 경우 if (StringUtil.isEmpty(loginResult)) { RequestCache cache = new HttpSessionRequestCache(); - SavedRequest savedRequest = cache.getRequest(req, res); + SavedRequest savedRequest = cache.getRequest(request, response); if (savedRequest != null) { redirectUrl = savedRequest.getRedirectUrl(); } + + // 쿠키 카트(비로그인 상태의 카트정보) 존재하는 경우, 해당 사용자 카트(DB)로 등록한 후, 쿠키 카트 삭제 + //String mbInfoId = getMbInfoId(request); + //cartService.mergeCart(mbInfoId, request, response); } // 로그인 실패 else { @@ -420,10 +430,10 @@ public class LoginController { * @return * @throws Exception */ - @RequestMapping("/login/loginCouncilSSO.do") + @RequestMapping(value= {"/login/loginCouncilSSO.do"}) public String loginCouncilSSO( - HttpServletRequest req, - HttpServletResponse res, + HttpServletRequest request, + HttpServletResponse response, HttpSession session, ModelMap model) throws Exception { @@ -439,10 +449,12 @@ public class LoginController { //----------------------------------------------- // 로그인 처리 //----------------------------------------------- - String loginResult = loginService.loginCouncilSSO(req, councilCd, oauthUser); + String loginResult = loginService.loginCouncilSSO(request, councilCd, oauthUser); // 정상 SNS 연동 로그인 if(loginResult == null) { + String mbInfoId = getMbInfoId(request); + cartService.mergeCart(mbInfoId, request, response); SessionConfig.removeLoginInfo(jsessionId); // 세션에 설정된 redirect 주소 확인 return "redirect:" + councilReturnUrl; diff --git a/src/main/resources/nlib/nlib.properties b/src/main/resources/nlib/nlib.properties index e6d1f059..2baf8f24 100644 --- a/src/main/resources/nlib/nlib.properties +++ b/src/main/resources/nlib/nlib.properties @@ -154,3 +154,13 @@ auth.role.user = ROLE_USER auth.role.admin = ROLE_ADMIN # \uc2dc\uc2a4\ud15c\uad00\ub9ac\uc790 auth.role.system = ROLE_SYSTEM + + +#---------------------------------------- +# \uce74\ud2b8 \uad00\ub828 +#---------------------------------------- +# \ubbf8\ub85c\uadf8\uc778 \uc0ac\uc6a9\uc790\uc758 \uce74\ud2b8\uc815\ubcf4\uac00 \uc800\uc7a5\ub418\ub294 \ucfe0\ud0a4 \uc124\uc815 \ub3c4\uba54\uc778 +cart.cookie.domain = nculture.org +# \ubbf8\ub85c\uadf8\uc778 \uc0ac\uc6a9\uc790\uc758 \uce74\ud2b8\uc815\ubcf4\uac00 \uc800\uc7a5\ub418\ub294 \ucfe0\ud0a4\uba85 +cart.cookie.name = _NLIB_CART_COOKIE +cart.cookie.path = / diff --git a/src/main/webapp/WEB-INF/jsp/nlib/cart/listCartItems.jsp b/src/main/webapp/WEB-INF/jsp/nlib/cart/listCartItems.jsp index 337c9333..2699a10a 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/cart/listCartItems.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/cart/listCartItems.jsp @@ -300,6 +300,15 @@ function fn_changeCartItems(cartTypeCd, cartTypeNm) { + +
+COOKIES : + + + + diff --git a/src/main/webapp/WEB-INF/jsp/nlib/login/loginPreSet.jsp b/src/main/webapp/WEB-INF/jsp/nlib/login/loginPreSet.jsp index dc94f591..fb90e92c 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/login/loginPreSet.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/login/loginPreSet.jsp @@ -36,7 +36,7 @@ 서비스 이동중 @@ -62,5 +62,11 @@ message : < +
+COOKIES : + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/nlib/rent/listRentItems.jsp b/src/main/webapp/WEB-INF/jsp/nlib/rent/listRentItems.jsp index 0968edff..6c035080 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/rent/listRentItems.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/rent/listRentItems.jsp @@ -1,37 +1,40 @@ + <% -/** - *
- * @Class Name : listRentItems.jsp
- * 
- * @Description : 대출 목록을 조회한다.
- * 
- * 
- * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
- *
- * 
- * - * @ ------------ -------- --------------------------- - * @ 수정일 수정자 수정내용 - * @ ------------ -------- --------------------------- - * @ 2021. 7. 21. JSYOO 최초 생성 - * @ 2021.10. 14. KNKIM 변경API 및 화면설계서 반영 - * - * - * @author 이씨플라자 * DIGITALSHIP JSYOO - * @since 2021. 7. 21. - * @version 1.0 - * - */ - %> -<%@ page language="java" contentType="text/html; charset=UTF-8" %> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %> -<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> -<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> -<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> -<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%> + /** + *
+	 * @Class Name : listRentItems.jsp
+	 * 
+	 * @Description : 대출 목록을 조회한다.
+	 * 
+	 * 
+	 * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+	 *
+	 * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 7. 21. JSYOO 최초 생성 + * @ 2021.10. 14. KNKIM 변경API 및 화면설계서 반영 + * + * + * @author 이씨플라자 * DIGITALSHIP JSYOO + * @since 2021. 7. 21. + * @version 1.0 + * + */ +%> +<%@ page language="java" contentType="text/html; charset=UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" + uri="http://www.springmodules.org/tags/commons-validator"%> +<%@ taglib prefix="sec" + uri="http://www.springframework.org/security/tags"%> 대출관리 @@ -41,9 +44,12 @@ ${pageTitle} - - - + + +