@@ -117,7 +117,14 @@ public ResponseEntity<String> oauth2SuccessPage(Authentication authentication, H
117117
118118 if (principal instanceof Long ) {
119119 memberId = (Long ) principal ;
120- loginId = (String ) authentication .getDetails ();
120+ // Details가 Map이면 loginId 추출
121+ if (authentication .getDetails () instanceof Map ) {
122+ @ SuppressWarnings ("unchecked" )
123+ Map <String , String > details = (Map <String , String >) authentication .getDetails ();
124+ loginId = details .get ("loginId" );
125+ } else if (authentication .getDetails () instanceof String ) {
126+ loginId = (String ) authentication .getDetails ();
127+ }
121128 } else if (principal instanceof PrincipalDetails principalDetails ) {
122129 com .ai .lawyer .domain .member .entity .MemberAdapter member = principalDetails .getMember ();
123130 loginId = member .getLoginId ();
@@ -203,10 +210,17 @@ public ResponseEntity<LogoutResponse> logout(Authentication authentication, Http
203210
204211 if (authentication != null ) {
205212 // 1순위: authentication.getDetails()에서 loginId 추출 (JWT 필터가 설정)
206- if (authentication .getDetails () instanceof String ) {
207- loginId = (String ) authentication .getDetails ();
213+ if (authentication .getDetails () instanceof Map ) {
214+ @ SuppressWarnings ("unchecked" )
215+ Map <String , String > details = (Map <String , String >) authentication .getDetails ();
216+ loginId = details .get ("loginId" );
208217 log .info ("JWT Details로 로그아웃: loginId={}" , loginId );
209218 }
219+ // 1-2순위: 이전 버전 호환성 (String으로 저장된 경우)
220+ else if (authentication .getDetails () instanceof String ) {
221+ loginId = (String ) authentication .getDetails ();
222+ log .info ("JWT Details(legacy)로 로그아웃: loginId={}" , loginId );
223+ }
210224 // 2순위: PrincipalDetails (OAuth2 직접 로그인)
211225 else if (authentication .getPrincipal () instanceof PrincipalDetails principalDetails ) {
212226 com .ai .lawyer .domain .member .entity .MemberAdapter member = principalDetails .getMember ();
@@ -257,10 +271,17 @@ public ResponseEntity<Map<String, Object>> withdraw(Authentication authenticatio
257271
258272 if (authentication != null ) {
259273 // 1순위: authentication.getDetails()에서 loginId 추출 (JWT 필터가 설정)
260- if (authentication .getDetails () instanceof String ) {
261- loginId = (String ) authentication .getDetails ();
274+ if (authentication .getDetails () instanceof Map ) {
275+ @ SuppressWarnings ("unchecked" )
276+ Map <String , String > details = (Map <String , String >) authentication .getDetails ();
277+ loginId = details .get ("loginId" );
262278 log .info ("JWT Details로 회원 탈퇴: loginId={}" , loginId );
263279 }
280+ // 1-2순위: 이전 버전 호환성 (String으로 저장된 경우)
281+ else if (authentication .getDetails () instanceof String ) {
282+ loginId = (String ) authentication .getDetails ();
283+ log .info ("JWT Details(legacy)로 회원 탈퇴: loginId={}" , loginId );
284+ }
264285 // 2순위: PrincipalDetails (OAuth2 직접 로그인)
265286 else if (authentication .getPrincipal () instanceof PrincipalDetails principalDetails ) {
266287 com .ai .lawyer .domain .member .entity .MemberAdapter member = principalDetails .getMember ();
0 commit comments