hmkim 06-16
250616 김혜민 테이블명 오류 수정
@a836a9f04f79a90c8d29712999b6a3a4a130d7eb
src/main/java/com/takensoft/cms/bbs/service/Impl/BbsCnServiceImpl.java
--- src/main/java/com/takensoft/cms/bbs/service/Impl/BbsCnServiceImpl.java
+++ src/main/java/com/takensoft/cms/bbs/service/Impl/BbsCnServiceImpl.java
@@ -612,7 +612,6 @@
             HashMap<String, Object> result = new HashMap<>();
             // 등록된 토큰에서 사용자 정보 조회
             String writer = verificationService.getCurrentUserId();
-            System.out.println("writer ::::::작성자어디갔노" + writer);
             if (writer == null || writer.isEmpty()) {
                 throw new CustomNotFoundException("사용자 정보 조회에 실패했습니다.");
             }
src/main/java/com/takensoft/cms/mber/service/Impl/UnifiedLoginServiceImpl.java
--- src/main/java/com/takensoft/cms/mber/service/Impl/UnifiedLoginServiceImpl.java
+++ src/main/java/com/takensoft/cms/mber/service/Impl/UnifiedLoginServiceImpl.java
@@ -134,6 +134,7 @@
             // 회원 ID 생성
             String mbrId = mberIdgn.getNextStringId();
             String lowProviderType = convertProviderToMbrType(lgnOffrType);
+            String ip = httpRequestUtil.getIp(request);
 
             // 새 사용자 정보 설정
             MberVO newUser = new MberVO();
@@ -147,6 +148,8 @@
             newUser.setUseYn(true);
             newUser.setSysPvsnYn("1");
             newUser.setRgtr("OAUTH2_SYSTEM");
+            newUser.setPswd(getPasswordEncoder().encode("OAUTH2_USER_NO_PASSWORD"));
+            newUser.setFrstRegIp(ip);
 
             // 회원 정보 저장
             int result = mberDAO.saveOAuthUser(newUser);
@@ -161,6 +164,10 @@
             userRole.setRgtr("OAUTH2_SYSTEM");
             mberDAO.authorSave(userRole);
 
+            List<MberAuthorVO> authorities = new ArrayList<>();
+            authorities.add(userRole);
+            newUser.setAuthorList(authorities);
+
             // 소셜 계정 정보 저장
             MberSocialAccountVO socialAccount = new MberSocialAccountVO();
             socialAccount.setMbrId(mbrId);
src/main/java/com/takensoft/cms/token/web/RefreshTokenController.java
--- src/main/java/com/takensoft/cms/token/web/RefreshTokenController.java
+++ src/main/java/com/takensoft/cms/token/web/RefreshTokenController.java
@@ -46,7 +46,7 @@
     private final RedisTemplate<String, String> redisTemplate;
 
     /**
-     * 로그아웃 - 세션/JWT 모드 통합 처리 + 완전 정리
+     * 로그아웃 - 세션/JWT 모드 통합 처리
      */
     @PostMapping(value = "/mbr/logout.json")
     public ResponseEntity<?> logout(HttpServletRequest req, HttpServletResponse res){
@@ -69,8 +69,6 @@
                 }
             }
 
-            log.info("로그아웃 시작 - 사용자: {}, 모드: {}", mbrId, loginMode);
-
             // 3. DB에서 Refresh 토큰 삭제
             int dbResult = 0;
             if (mbrId != null) {
@@ -89,19 +87,11 @@
             // 5. 공통 정리 작업 (모든 쿠키 완전 제거)
             performCompleteCleanup(req, res);
 
-            log.info("로그아웃 완료 - 사용자: {}", mbrId);
             return resUtil.successRes(dbResult, MessageCode.LOGOUT_SUCCESS);
 
         } catch (Exception e) {
-            log.error("로그아웃 처리 중 오류 발생 - 사용자: {}, 오류: {}", mbrId, e.getMessage(), e);
-
             // 오류가 발생해도 기본 정리는 수행
-            try {
-                performCompleteCleanup(req, res);
-            } catch (Exception cleanupError) {
-                log.error("정리 작업 중 오류: {}", cleanupError.getMessage());
-            }
-
+            performCompleteCleanup(req, res);
             return resUtil.successRes(0, MessageCode.LOGOUT_SUCCESS); // 클라이언트에는 성공으로 응답
         }
     }
@@ -112,8 +102,6 @@
     @PostMapping(value = "/mbr/logoutAll.json")
     public ResponseEntity<?> logoutAll(HttpServletRequest req, HttpServletResponse res) {
         try {
-            log.info("전체 사용자 로그아웃 시작");
-
             // 1. 모든 세션 무효화
             sessionUtil.invalidateAllSessions();
 
@@ -121,20 +109,13 @@
             clearAllRedisAuthData();
 
             // 3. 모든 Refresh 토큰 삭제
-            try {
                 refreshTokenService.deleteAll();
-            } catch (Exception e) {
-                log.warn("전체 Refresh 토큰 삭제 실패: {}", e.getMessage());
-            }
 
             // 4. 현재 요청자도 로그아웃
             performCompleteCleanup(req, res);
-
-            log.info("전체 사용자 로그아웃 완료");
             return resUtil.successRes("모든 사용자가 로그아웃되었습니다.", MessageCode.LOGOUT_SUCCESS);
 
         } catch (Exception e) {
-            log.error("전체 로그아웃 처리 중 오류", e);
             // 오류가 발생해도 현재 요청자는 로그아웃 처리
             performCompleteCleanup(req, res);
             return resUtil.successRes("로그아웃 처리되었습니다.", MessageCode.LOGOUT_SUCCESS);
@@ -145,18 +126,11 @@
      * 세션 모드 로그아웃 처리
      */
     private void handleSessionLogout(HttpServletRequest req, HttpServletResponse res, String mbrId) {
-        try {
             // 1. 현재 세션 무효화
             HttpSession session = req.getSession(false);
             if (session != null) {
-                try {
                     session.invalidate();
-                    log.debug("세션 무효화 완료: {}", session.getId());
-                } catch (IllegalStateException e) {
-                    log.debug("이미 무효화된 세션: {}", e.getMessage());
-                }
             }
-
             // 2. SessionUtil에서 제거
             if (mbrId != null) {
                 sessionUtil.removeSession(mbrId);
@@ -166,33 +140,22 @@
             if (mbrId != null) {
                 cleanupSessionRedisData(mbrId);
             }
-
-        } catch (Exception e) {
-            log.error("세션 모드 로그아웃 처리 중 오류: {}", e.getMessage(), e);
-        }
     }
 
     /**
      * JWT 모드 로그아웃 처리
      */
     private void handleJWTLogout(HttpServletRequest req, HttpServletResponse res, String mbrId) {
-        try {
             // 1. Redis에서 JWT 정보 삭제 (중복로그인 관리용)
             if (mbrId != null && !loginPolicyService.getPolicy()) {
                 redisTemplate.delete("jwt:" + mbrId);
-                log.debug("Redis JWT 토큰 삭제: jwt:{}", mbrId);
             }
-
-        } catch (Exception e) {
-            log.error("JWT 모드 로그아웃 처리 중 오류: {}", e.getMessage(), e);
-        }
     }
 
     /**
      * Redis 세션 데이터 정리
      */
     private void cleanupSessionRedisData(String mbrId) {
-        try {
             // 세션 토큰 키 삭제
             String sessionTokenKey = "session_token:" + mbrId;
             redisTemplate.delete(sessionTokenKey);
@@ -205,19 +168,13 @@
             Set<String> userKeys = redisTemplate.keys("*:" + mbrId);
             if (userKeys != null && !userKeys.isEmpty()) {
                 redisTemplate.delete(userKeys);
-                log.debug("사용자별 Redis 키 삭제: {}", userKeys);
             }
-
-        } catch (Exception e) {
-            log.error("Redis 세션 데이터 정리 중 오류: {}", e.getMessage(), e);
-        }
     }
 
     /**
      * 모든 Redis 인증 데이터 정리 (전체 로그아웃용)
      */
     private void clearAllRedisAuthData() {
-        try {
             String[] globalPatterns = {
                     "session:*",
                     "session_token:*",
@@ -231,19 +188,14 @@
                 Set<String> keys = redisTemplate.keys(pattern);
                 if (keys != null && !keys.isEmpty()) {
                     redisTemplate.delete(keys);
-                    log.info("전체 Redis 키 삭제: {} 개 (패턴: {})", keys.size(), pattern);
                 }
             }
-        } catch (Exception e) {
-            log.error("전체 Redis 데이터 정리 실패", e);
-        }
     }
 
     /**
      * 완전한 정리 작업 (모든 쿠키 제거 포함)
      */
     private void performCompleteCleanup(HttpServletRequest req, HttpServletResponse res) {
-        try {
             // 1. SecurityContext 제거
             SecurityContextHolder.clearContext();
 
@@ -258,17 +210,12 @@
             res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate, private");
             res.setHeader("Pragma", "no-cache");
             res.setHeader("Expires", "0");
-
-        } catch (Exception e) {
-            log.error("완전한 정리 작업 중 오류: {}", e.getMessage(), e);
-        }
     }
 
     /**
      * 모든 쿠키 완전 제거 (확장된 버전)
      */
     private void clearAllCookiesCompletely(HttpServletRequest req, HttpServletResponse res) {
-        try {
             // 제거할 쿠키 목록 (확장)
             String[] cookieNames = {
                     // 일반 인증 쿠키
@@ -376,12 +323,6 @@
                     }
                 }
             }
-
-            log.info("모든 쿠키 완전 제거 완료");
-
-        } catch (Exception e) {
-            log.error("쿠키 완전 제거 실패", e);
-        }
     }
 
     /**
@@ -398,7 +339,6 @@
                 return resUtil.errorRes(MessageCode.JWT_EXPIRED);
             }
         } catch (Exception e) {
-            log.error("토큰 재발급 중 오류: {}", e.getMessage(), e);
             return resUtil.errorRes(MessageCode.JWT_EXPIRED);
         }
     }
src/main/java/com/takensoft/common/config/SecurityConfig.java
--- src/main/java/com/takensoft/common/config/SecurityConfig.java
+++ src/main/java/com/takensoft/common/config/SecurityConfig.java
@@ -147,7 +147,7 @@
                         configuration.setAllowCredentials(true); // 프론트에서 credentials 설정하면 true
                         configuration.setMaxAge(3600L); // 허용을 물고 있을 시간
                  //       configuration.setExposedHeaders(Collections.singletonList("Authorization")); // 서버에서 JWT를 Authorization에 담아 보내기 위해 허용을 함
-                        configuration.setExposedHeaders(List.of("Authorization", "loginMode"));
+                        configuration.setExposedHeaders(List.of("Authorization", "loginMode",  "policyMode"));
                         return configuration;
                     }
                 })
src/main/java/com/takensoft/common/oauth/handler/OAuth2AuthenticationSuccessHandler.java
--- src/main/java/com/takensoft/common/oauth/handler/OAuth2AuthenticationSuccessHandler.java
+++ src/main/java/com/takensoft/common/oauth/handler/OAuth2AuthenticationSuccessHandler.java
@@ -1,6 +1,7 @@
 package com.takensoft.common.oauth.handler;
 
 import com.takensoft.cms.loginPolicy.service.LoginModeService;
+import com.takensoft.cms.loginPolicy.service.LoginPolicyService;
 import com.takensoft.cms.mber.service.LgnHstryService;
 import com.takensoft.cms.mber.service.UnifiedLoginService;
 import com.takensoft.cms.mber.vo.LgnHstryVO;
@@ -48,6 +49,7 @@
     private final HttpRequestUtil httpRequestUtil;
     private final LoginUtil loginUtil;
     private final LoginModeService loginModeService;
+    private final LoginPolicyService loginPolicyService;
 
     @Value("${front.url}")
     private String frontUrl;
@@ -67,6 +69,7 @@
 
             // 현재 설정된 로그인 모드 확인
             String currentLoginMode = loginModeService.getLoginMode();
+            boolean allowMultipleLogin = loginPolicyService.getPolicy();
 
             // 통합 로그인 서비스를 통한 OAuth2 사용자 처리
             MberVO mber = unifiedLoginService.processOAuth2User(
@@ -85,7 +88,10 @@
             // LoginUtil을 통한 통합 로그인 처리
             loginUtil.successLogin(mber, request, response);
 
-            String redirectUrl = String.format("%s/?oauth_success=true&loginMode=%s", frontUrl, currentLoginMode);
+            String redirectUrl = String.format("%s/?oauth_success=true&loginMode=%s&policyMode=%s",
+                    frontUrl,
+                    currentLoginMode,
+                    allowMultipleLogin ? "Y" : "N");
 
             getRedirectStrategy().sendRedirect(request, response, redirectUrl);
 
src/main/java/com/takensoft/common/util/LoginUtil.java
--- src/main/java/com/takensoft/common/util/LoginUtil.java
+++ src/main/java/com/takensoft/common/util/LoginUtil.java
@@ -64,7 +64,11 @@
      */
     public void successLogin(MberVO mber, HttpServletRequest req, HttpServletResponse res) throws IOException {
         String loginMode = loginModeService.getLoginMode();
-        res.setHeader("loginMode", loginMode);
+        boolean allowMultipleLogin = loginPolicyService.getPolicy();
+
+        res.setHeader("loginMode", loginMode); // J, S
+        res.setHeader("policyMode", allowMultipleLogin ? "Y" : "N"); // Y, N
+
         // 로그인 이력 등록
         String loginType = (String) req.getAttribute("loginType");
         if (!"OAUTH2".equals(loginType)) {
src/main/resources/mybatis/mapper/mber/mber-SQL.xml
--- src/main/resources/mybatis/mapper/mber/mber-SQL.xml
+++ src/main/resources/mybatis/mapper/mber/mber-SQL.xml
@@ -338,7 +338,9 @@
             mbr_type,
             sys_pvsn_yn,
             rgtr,
-            reg_dt
+            reg_dt,
+            pswd,
+            frst_reg_ip
         ) VALUES (
             #{mbrId},
             #{lgnId},
@@ -346,14 +348,16 @@
             #{ncnm},
             #{eml},
             #{mbrStts},
-            #{useYn},
+            'Y',
             'N',
             'N',
             'N',
             #{mbrType},
             #{sysPvsnYn},
             #{rgtr},
-            NOW()
+            NOW(),
+            #{pswd},
+            #{frstRegIp}
         )
     </insert>
 
Add a comment
List