[java] 자바 웹소켓의 클라이언트 인증

이번 포스트에서는 자바를 사용하여 웹소켓 클라이언트를 구축하고, 클라이언트가 서버에 연결할 때 인증을 수행하는 방법에 대해 알아보겠습니다.

웹소켓 클라이언트 구축

먼저, 자바 웹소켓 클라이언트를 만들기 위해 javax.websocket 패키지를 사용할 것입니다. 클라이언트는 웹소켓 서버에 연결하고 통신하기 위해 이 패키지를 사용합니다.

import javax.websocket.ClientEndpoint;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import java.net.URI;

@ClientEndpoint
public class MyWebSocketClient {

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("Connected to server");
    }

    @OnMessage
    public void onMessage(String message, Session session) {
        System.out.println("Received message: " + message);
    }

    public static void main(String[] args) {
        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
        URI uri = URI.create("ws://example.com/websocket");
        container.connectToServer(MyWebSocketClient.class, uri);
    }
}

위의 코드는 웹소켓 클라이언트를 구현하는 예시입니다. @ClientEndpoint 어노테이션을 사용하여 이 클래스를 웹소켓 클라이언트로 지정하고, @OnOpen@OnMessage 어노테이션을 사용하여 연결 및 메시지 수신 시 처리할 메서드를 정의합니다.

클라이언트 인증

클라이언트가 서버에 연결할 때, 서버는 보안 상의 이유로 클라이언트의 신원을 인증할 수 있습니다. 이 때, 클라이언트는 보안 토큰 또는 인증 자격 증명을 서버로 전송하여 인증을 수행할 수 있습니다. 아래는 간단한 예시입니다.

public static void main(String[] args) {
    WebSocketContainer container = ContainerProvider.getWebSocketContainer();
    URI uri = URI.create("ws://example.com/websocket");
    
    // Add authentication headers
    ClientEndpointConfig.Configurator configurator = new ClientEndpointConfig.Configurator() {
        @Override
        public void beforeRequest(Map<String, List<String>> headers) {
            headers.put("Authorization", Arrays.asList("Bearer yourAuthToken"));
        }
    };
    ClientEndpointConfig config = ClientEndpointConfig.Builder.create().configurator(configurator).build();
    
    container.connectToServer(MyWebSocketClient.class, config, uri);
}

위의 코드에서 ClientEndpointConfig.Configurator를 사용하여 beforeRequest 메서드를 오버라이드하고, 해당 메서드 내에서 Authorization 헤더를 추가하여 클라이언트의 토큰을 전송하고 있습니다.

위와 같이 인증을 수행하여 클라이언트의 보안을 유지할 수 있습니다.

이상으로 자바 웹소켓 클라이언트의 인증에 대해 알아보았습니다.

참고 자료