5847927828
611
2020-05-09 15:55:42
2
195

웹 소켓 유저정보


스프링 시큐리티 사용 중이고 웹소켓을 사용해서 채팅기능을 구현하고자 합니다.

그런데 아래 코드처럼 웹 소켓 연결 시에 연결된 사용자의 username을 가져오고싶은데

컨트롤러에서 세션으로 받아오는 방법밖에 없을까요? securitycontextholder을 사용하니깐 아예 소켓이 종료

되더라구요..

	@Override
	public void afterConnectionEstablished(WebSocketSession session) throws Exception { //채팅방 입장
	}
0
  • 답변 2

  • John Suhr
    3k
    2020-05-09 20:10:44 작성 2020-05-09 20:18:11 수정됨

    SecurityContextHolder는 세션 기반입니다. 세션을 구분하기 위해서는 Session-Cookie의 id를 가지고 구분합니다. Cookie는 Http Protocol의 규약에 따라 클라이언트-서버간 주고받는 값이구요, 웹소켓은 별도의 프로토콜을 가지고 WebSocket Key를 따로 주고 받습니다. 따라서 SecurityContextHolder로 웹 소켓 Principal을 찾을 수는 없습니다.

    그래서 나온게 HttpSessionHandshakeInterceptor입니다. 설정이 되어 있는지 확인해 보세요.

  • 5847927828
    611
    2020-05-09 20:42:49

    John Suhr

    아 감사합니다 ㅠㅠ 해결했네요

  • 로그인을 하시면 답변 을 등록할 수 있습니다.