4

Spring 4 WebSocket STOMP アプリケーションを試しています。各ユーザーが一意のセッション ID を持っているという条件で、認証されていない 1 人のユーザーに返信する方法はありますか? 現在、メッセージをブロードキャストするか、認証されたユーザーに直接送信することしかできません。

@Controller
public class ProductController {

    @MessageMapping("/products/{id}")
    @SendTo("/topic") // This line makes return value to be broadcasted to every connected user.
    public String getProduct(@DestinationVariable int id) {
        return "Product " + id;
    }
}
4

2 に答える 2

8

着信ユーザーに匿名 ID を割り当てることができます。それには2つの方法があります。

1 つは、すべての WebSocketSession にある種の ID をDefaultHandshakeHandlerオーバーライドして割り当てるサブクラスを構成できることです。determineUserちなみにこれには、2014 年 1 月 23 日月曜日にリリースされる 4.0.1 が必要です (現在、ビルド スナップショットが利用可能です)。

HttpServletRequest.getUserPrincipal2 つ目は、WebSocket セッションは、ハンドシェイク HTTP 要求で返された値にフォールバックします。サーブレット Filter で HttpServletRequest をラップし、そのメソッドから何を返すかを決定できます。または、AnonymousAuthenticationFilter を持つ Spring Security を使用している場合は、そのcreateAuthenticationメソッドをオーバーライドします。

于 2014-01-23T19:50:27.527 に答える