반응형

들어가며

  • WebSocketSecurity를 활용하여 인증된 사용자에게만 웹소켓 연결, 메시지 전송 등을 제한할 수 있다.
  • WebSocketSecurity는 WebSecurity를 통해 처리된 인증 정보를 그대로 사용할 수 있다.
  • 아래는 Form Authentication을 통해 로그인한 사용자에게만 웹소켓 연결을 허용하는 예제를 다룬다.

의존성 추가

implementation("org.springframework.security:spring-security-messaging")

WebSocketSecurityConfig

@EnableWebSocketSecurity
@Configuration
public class WebSocketSecurityConfig {
    @Bean
    public AuthorizationManager<Message<?>> messageAuthorizationManager(MessageMatcherDelegatingAuthorizationManager.Builder messages) {
        return messages
            .simpTypeMatchers(SimpMessageType.CONNECT).authenticated() // 웹소켓 연결시에만 인증 확인(인증 정보는 WebSecurity(ex. formLogin)를 통해 인증한 정보를 활용)
            .anyMessage().permitAll()
            .build();
    }

    @Bean("csrfChannelInterceptor") // for disable csrf
    public ChannelInterceptor csrfChannelInterceptor() {
        return new ChannelInterceptor() {
        };
    }
}

미인증 사용자 테스트

  • 로그인을 수행하지 않고 WebSocket 연결 페이지에 접속하여 웹소켓을 연결한다.
  • 연결 실패하는지 확인한다.

인증 사용자 테스트

  • 로그인 페이지로 이동하여 로그인을 수행한다.
  • WebSocket 연결 페이지에 접속하여 웹소켓을 연결한다.
  • 웹소켓 연결에 성공하는지 확인한다.
반응형

+ Recent posts