개념
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 |