2017-04-11 14 views
1

私は、ユーザーからのソケット要求を処理し、応答を送信するJavaソケットAPIアプリケーションを持っています。 私はコンフィギュラを持っている:私は、ユーザーへの応答を送信するとspring socket/queue/private/* destinationへのサブスクリプションを防ぐ方法。

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 
    private static final Logger LOGGER = Logger.getLogger(WebSocketConfig.class); 
    @Override 
    public void configureMessageBroker(MessageBrokerRegistry config) { 
     config.enableSimpleBroker("/queue"); 
     config.setApplicationDestinationPrefixes("/server_in"); 
     config.setUserDestinationPrefix("/user"); 
    } 

    @Override 
    public void registerStompEndpoints(StompEndpointRegistry registry) { 
     registry.addEndpoint("/websocket").withSockJS(); 
    } 
} 

私は次のようにします。クライアントで this.simpMessagingTemplate.convertAndSend("/queue/private/user_"+secret_key, socketResponse);

私は次のコードを持っている:

sc.subscribe('/queue/private/user_'+secret_key, function (greeting) { 
     console.log(greeting.body); 
    }); 

をし、応答が処理されます成功しました。 しかし、問題は、他のユーザーが "/ queue/private/*"宛先にサブスクライブしてプライベートメッセージを処理できることです。

sc.subscribe('/queue/private/*', function (greeting) { 
     console.log(greeting.body); 
    }); 

どのようにすればこのような行動をとることができますか?あなたは、各ユーザがソケットを持っているとだけ彼にメッセージを取得したい場合は

答えて

3

、何を行うことができますすることです。

あなたがエンドポイントになく、例えば、「/ユーザ」インフロントで行うよう購読

sc.subscribe('/user/queue/websocket, function (greeting) { 
    console.log(greeting.body); 
}); 

とサーバ側で、あなたは残りのメソッドが必要です:すべてのユーザーの各チャンネルにsubscibersおよびユーザーのみが通知される。これにより

@RequestMapping(value = "/test", method = RequestMethod.POST) 
public void test(Principal principal) throws Exception { 
    this.template.convertAndSendToUser(principal.getName(), "/queue/click", ""); 
} 

、残りの呼び出しが行われます。

残りの呼び出しは、プリンシパルにユーザー名があるように認証される必要があります。

ユーザーチャネルはSpringから自動管理されるため、このように追加する必要があります。

関連する問題