반응형
spring boot로 websocket을 개발하다보면 Session의 Connect / Disconnect 되는 시점을 알고 싶을 때가 있는데
(사용자 동시 접속 리스트 관리 차원)
그때는 ChannelInterceptorAdapter를 사용하면 된다.
@Component
public class StompHandler extends ChannelInterceptorAdapter {
private final Logger logger = getLogger(this.getClass());
@Override
public void postSend(Message message, MessageChannel channel, boolean sent) {
StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message);
String sessionId = accessor.getSessionId();
switch (accessor.getCommand()) {
case CONNECT:
// 유저가 Websocket으로 connect()를 한 뒤 호출됨
break;
case DISCONNECT:
// 유저가 Websocket으로 disconnect() 를 한 뒤 호출됨 or 세션이 끊어졌을 때 발생함(페이지 이동~ 브라우저 닫기 등)
break;
default:
break;
}
}
}
이렇게 상속받아 구현을 해서 Bean으로 등록을 한다(@Component)
그 후, 해당 인터셉터를 websocket의 설정 부분에 달아주면 된다
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Autowired
private StompHandler stompHandler;
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic", "/queue"); // 해당 api를 구독하는 클라이언트에게 메세지 전송
// config.enableStompBrokerRelay("/topic", "/queue");
config.setApplicationDestinationPrefixes("/some_prefix"); // 클라이언트로부터 받을 prefix
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/battleroyale").setAllowedOrigins("*").withSockJS(); // 클라이언트에서 연결할 websocket 설정
}
@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
registration.interceptors(stompHandler);
}
}
configureClientInboundChannel 부분을 override 해서 ChannelRegistration 부분에 인터셉터를 달아준다.
그러면 유저의 CONNECT와 DISCONNECT 할때의 정보를 가져올 수 있다.
그 세션의 데이터는 StompHeaderAccessor 를 통해서 얻어올 수 있다(각종 웹소켓 관련 정보)
간단하게 세션의 ID를 가져오려면
accessor.getSessionId() 를 호출하면 된다
반응형
'Development > Java' 카테고리의 다른 글
[JAVA/OS] /dev/random 관련 PRNG 오류 (0) | 2018.06.17 |
---|---|
[JAVA] 랜덤 퍼센트 계산하는 클래스(?) (0) | 2018.06.08 |
[Spring Boot] Resource load 관련 (0) | 2018.06.08 |
[Spring Boot] Spring Security maximumSessions 관련 (0) | 2018.06.08 |
SpringBoot Jackson(ObjectMapper) Config (0) | 2017.07.07 |