복붙노트

[SPRING] Spring websocket stomp 서버에서 클라이언트 세션 연결 해제

SPRING

Spring websocket stomp 서버에서 클라이언트 세션 연결 해제

나는 꽤 많이 찾았고 이것을 발견 할 수 없었다 : 스프링 websocket 스톰프 서버가 sessionId에 기반한 클라이언트를 연결 해제 할 수있는 방법이 있는가?

클라이언트가 서버에 연결되면 서버가 클라이언트의 연결을 끊을 수있는 방법이없는 것 같습니다.

해결법

  1. ==============================

    1.API가 사용자가 찾고있는 것을 제공하지 않는다는 것을 알고있는 한 서버 측에서는 연결 해제 이벤트 만 감지 할 수 있습니다. 특정 클라이언트의 연결을 끊으려는 경우 litte 해결 방법을 찾아야합니다. 이 하나:

    API가 사용자가 찾고있는 것을 제공하지 않는다는 것을 알고있는 한 서버 측에서는 연결 해제 이벤트 만 감지 할 수 있습니다. 특정 클라이언트의 연결을 끊으려는 경우 litte 해결 방법을 찾아야합니다. 이 하나:

    해결 방법은 조금 번거롭지만 작동 할 것입니다.

  2. ==============================

    2.실제로 몇 가지 해결 방법을 사용하면 원하는 것을 얻을 수 있습니다. 이를 위해 다음을 수행해야합니다.

    실제로 몇 가지 해결 방법을 사용하면 원하는 것을 얻을 수 있습니다. 이를 위해 다음을 수행해야합니다.

    서버 측에서 클라이언트 세션의 연결을 끊을 수있는 방법을 보여주기 위해 샘플 스프링 부트 프로젝트를 만들었습니다. https://github.com/isaranchuk/spring-websocket-disconnect

  3. ==============================

    3.또한 사용자 정의 WebSocketHandlerDecorator를 구현하여 세션의 연결을 끊을 수 있습니다.

    또한 사용자 정의 WebSocketHandlerDecorator를 구현하여 세션의 연결을 끊을 수 있습니다.

    @Configuration
    @EnableWebSocketMessageBroker
    public class WebSocketConfig<S extends ExpiringSession> extends AbstractSessionWebSocketMessageBrokerConfigurer<S> {
    
        @Override
        public void configureWebSocketTransport(final WebSocketTransportRegistration registration) {
            registration.addDecoratorFactory(new WebSocketHandlerDecoratorFactory() {
                @Override
                public WebSocketHandler decorate(final WebSocketHandler handler) {
                    return new WebSocketHandlerDecorator(handler) {
                        @Override
                        public void afterConnectionEstablished(final WebSocketSession session) throws Exception {
    
                            session.close(CloseStatus.NOT_ACCEPTABLE);
                            super.afterConnectionEstablished(session);
                        }
                    };
                }
            });
            super.configureWebSocketTransport(registration);
        }
    
    
        @Override
        protected void configureStompEndpoints(final StompEndpointRegistry registry) {
        registry.addEndpoint("/home")
                .setHandshakeHandler(new DefaultHandshakeHandler(
                        new UndertowRequestUpgradeStrategy() // If you use undertow
                        // new JettyRequestUpgradeStrategy()
                        // new TomcatRequestUpgradeStrategy()
                ))
                .withSockJS();
        }
    }
    
  4. ==============================

    4.XML 설정의 경우, 를 사용할 수 있습니다. 장식 메서드를 구현하는 사용자 지정 WebSocketHandlerDecorator 및 WebSocketHandlerDecoratorFactory를 만듭니다.

    XML 설정의 경우, 를 사용할 수 있습니다. 장식 메서드를 구현하는 사용자 지정 WebSocketHandlerDecorator 및 WebSocketHandlerDecoratorFactory를 만듭니다.

  5. from https://stackoverflow.com/questions/28552033/disconnect-client-session-from-spring-websocket-stomp-server by cc-by-sa and MIT license