SPRING

SPRING 웹소켓에서 HttpSession 값 불러오기

Adev 2023. 2. 19. 00:01

개념

WebSocketSession과 HttpSession은 다르다.

WebSocketSession은 HttpServletResponse, HttpServletRequest 등 servlet 관련 클래스를 사용할 수 없다.

 

VO를 사용한 이용자 정보는 HttpSession에 저장된다.

WebSocket 접속자 정보는 WebSocketHandler에서 WebSocketSession에 저장된다.

 

HttpSessionHandshakeInterceptor를 사용하도록 설정하면 WebSocketHandler 동작(handshake) 이전에 HttpSession에 접근해 원하는 정보를 WebSocketHandler로 전달할 수 있다.

 

 


상황 

웹소켓에서 HttpSession을 사용해서 현재 로그인 중인 회원 아이디(MemberVO id)를 불러 오려 했으나 WebSocketSession의 id만 호출됐다.


+ HttpSessionHandshakeInterceptor는 등록한 상태이다. 스프링 웹소켓 기본설정 (Java Configuration)

 

 

해결 

session.getId()가 아니라 session.getAttributes()를 사용해서 값을 호출해 처리하면 된다.


ex) [MyWebSocketHandler.java]

 

//WebSocketSession id가 호출된다
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {

for (WebSocketSession s : sessionList) {
s.sendMessage(new TextMessage(session.getId() + " : " + message.getPayload()));
}

 

//HttpSession id가 호출된다
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {

Map map = (Map)session.getAttributes();
MemberVO m = (MemberVO)map.get("memberInfo");
String id = m.getId();
for (WebSocketSession s : sessionList) {
s.sendMessage(new TextMessage(id + " : " + message.getPayload()));
}

'SPRING' 카테고리의 다른 글

SPRING 웹소켓 기본설정 (Java Configuration)  (0) 2023.02.18
SPRING mybatis <selectKey>  (0) 2023.02.13
SPRING 의존성 주입  (0) 2023.02.08
SPRING 테스트 코드 작성  (0) 2023.02.07
SPRING 설정 (JAVA Configuration)  (0) 2023.02.06