Skip to content

Commit

Permalink
Fix : 쿠키기반으로 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
Mouon committed Aug 25, 2024
1 parent e064cbe commit a3e18a6
Showing 1 changed file with 50 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -25,33 +28,59 @@ public class JwtHandshakeInterceptor implements HandshakeInterceptor {

@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
Map<String, Object> attributes){
Map<String, Object> 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) {
Expand All @@ -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) {
Expand Down

0 comments on commit a3e18a6

Please sign in to comment.