Git Issue - https://github.com/bocho-drive/back/issues/100#issuecomment-2272555503
ws://localhost:8080/api/chat/msg/{chatId}
Bearer ~~
SecurityContextHolder.getContext().getAuthentication()
를 사용하였음null
로 처리가 되고 있어, 이에 대해서 원인을 알아보고자 했다.SecurityContextHolder의 context
가 공유되고 있지 않는다는 것이었다.WebSocketSession
객체 안에 유저정보가 담겨있던 것이다..!!!! /** 웹소켓 세션에서 사용자 정보를 가져오는 메서드 */
public CustomUserDetails getUserDetails(WebSocketSession session) {
Principal principal = session.getPrincipal();
if (principal instanceof UsernamePasswordAuthenticationToken) {
UsernamePasswordAuthenticationToken token = (UsernamePasswordAuthenticationToken) principal;
return (CustomUserDetails) token.getPrincipal();
}
return null;
}
ws://localhost:8080/api/chat/msg/6
로 웹소켓 Connect를 하면, JwtFilter
에 도달하여, SecurityContextHolder.setContext(context);
가 되는 것을 확인했다.ChatWebSocketHandler.java
의 afterConnectionEstablished
메소드 함수에서 SecurityContextHolder.getContext()가 Null이 되는 이유를 Thread환경이 다르다는 것을 이해했지만, 정확한 원인을 알지 못하였다.