content: package org.araymond.joal.web.config.security;
  
  import com.google.common.annotations.VisibleForTesting;
  import org.araymond.joal.web.annotations.ConditionalOnWebUi;
  import org.araymond.joal.web.config.security.websocket.interceptor.AuthChannelInterceptorAdapter;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.core.Ordered;
  import org.springframework.core.annotation.Order;
  import org.springframework.messaging.simp.config.ChannelRegistration;
  import org.springframework.messaging.support.ChannelInterceptor;
  import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
  import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
  
  import javax.inject.Inject;
  
  /**
   * Created by raymo on 30/07/2017.
   */
  @ConditionalOnWebUi
  @Configuration
  @Order(Ordered.HIGHEST_PRECEDENCE + 99)
  public class WebSocketAuthenticationSecurityConfig implements WebSocketMessageBrokerConfigurer {
      private final AuthChannelInterceptorAdapter authChannelInterceptorAdapter;
  
      @Inject
      public WebSocketAuthenticationSecurityConfig(final AuthChannelInterceptorAdapter authChannelInterceptorAdapter) {
          this.authChannelInterceptorAdapter = authChannelInterceptorAdapter;
      }
  
      @Override
      public void registerStompEndpoints(final StompEndpointRegistry registry) {
          // Endpoints are already registered on WebSocketConfig, no need to add more.
      }
  
      @Override
      public void configureClientInboundChannel(final ChannelRegistration registration) {
          registration.interceptors(this.createChannelInterceptors());
      }
  
      @VisibleForTesting
      ChannelInterceptor[] createChannelInterceptors() {
          return new ChannelInterceptor[]{this.authChannelInterceptorAdapter};
      }
  
  }
  