From a3e18a617982833ee9de6a13d1494daf864c356b Mon Sep 17 00:00:00 2001 From: HyunJun Mun <137624597+Mouon@users.noreply.github.com> Date: Sun, 25 Aug 2024 15:22:53 +0900 Subject: [PATCH] =?UTF-8?q?Fix=20:=20=EC=BF=A0=ED=82=A4=EA=B8=B0=EB=B0=98?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../util/JwtHandshakeInterceptor.java | 70 +++++++++++++------ 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/linkode/api_server/util/JwtHandshakeInterceptor.java b/src/main/java/com/linkode/api_server/util/JwtHandshakeInterceptor.java index fa49fadc..e503aaf0 100644 --- a/src/main/java/com/linkode/api_server/util/JwtHandshakeInterceptor.java +++ b/src/main/java/com/linkode/api_server/util/JwtHandshakeInterceptor.java @@ -1,12 +1,15 @@ package com.linkode.api_server.util; + import com.linkode.api_server.service.DataService; import com.linkode.api_server.service.TokenService; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpHeaders; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; +import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.stereotype.Component; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.server.HandshakeInterceptor; @@ -25,33 +28,59 @@ public class JwtHandshakeInterceptor implements HandshakeInterceptor { @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, - Map attributes){ + Map attributes) { log.info("[JwtHandshakeInterceptor.beforeHandshake]"); - HttpHeaders headers = request.getHeaders(); - String token = headers.getFirst("Sec-WebSocket-Protocol"); - long memberId = jwtProvider.extractIdFromHeader("Bearer "+token); - - if (token != null) { - try { - URI uri = request.getURI(); - String githubId = jwtProvider.extractGithubIdFromToken(token); - String studyroomId = extractStudyroomIdFromUri(uri); - if (tokenService.checkTokenExists(githubId)) { - dataService.validateStudyroomMember(memberId,Long.valueOf(studyroomId)); - attributes.put("memberId", String.valueOf(memberId)); - log.info("Socket Auth Success!"); - return true; + + if (request instanceof ServletServerHttpRequest) { + HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest(); + Cookie[] cookies = servletRequest.getCookies(); + + if (cookies != null) { + for (Cookie cookie : cookies) { + log.info("Found cookie : {} = {}", cookie.getName(), cookie.getValue()); + + if ("token".equals(cookie.getName())) { + String token = cookie.getValue(); + log.info("Extracted token: {}", token); + + if (token != null) { + try { + long memberId = jwtProvider.extractIdFromHeader("Bearer " + token);/** */ + String githubId = jwtProvider.extractGithubIdFromToken(token); + String studyroomId = extractStudyroomIdFromUri(request.getURI()); + log.info("Extracted memberId: {}", memberId); + + if (tokenService.checkTokenExists(githubId)) { + dataService.validateStudyroomMember(memberId, Long.valueOf(studyroomId)); + attributes.put("memberId", String.valueOf(memberId)); + log.info("Socket Auth Success!"); + return true; + } else { + log.error("Token does not exist!"); + } + } catch (Exception e) { + log.error("Authentication failed", e); + response.setStatusCode(org.springframework.http.HttpStatus.UNAUTHORIZED); + return false; + } + } else { + log.error("Token is null"); + } + } else { + log.info("!! No 'token' Cookie found !!"); + } } - } catch (Exception e) { - response.setStatusCode(org.springframework.http.HttpStatus.UNAUTHORIZED); - return false; + } else { + log.error("!! No cookies found in the request !!"); } } response.setStatusCode(org.springframework.http.HttpStatus.UNAUTHORIZED); - return false; /** JWT 토큰이 없거나 유효하지 않으면 연결 거부 */ + return false; } + + private String extractStudyroomIdFromUri(URI uri) { String query = uri.getQuery(); if (query != null) { @@ -64,6 +93,7 @@ private String extractStudyroomIdFromUri(URI uri) { } throw new IllegalArgumentException("studyroomId not found in query string"); } + @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {