公式パッケージ · フレームワーク

Spring らしく書ける Spring Boot のリアルタイム

Hibira クライアントを注入し、アノテーションを付けた Bean メソッドで private と presence チャンネルを認可し、Webhook をアプリケーションイベントに変えるスターターです。ブラウザやアプリは pusher-js、Laravel Echo、Pusher のモバイル SDK で接続でき、WebSocket サーバーや STOMP ブローカーを運用する必要はありません。

  • @HibiraChannel は Spring Security のユーザーでチャンネルを認可し、pusher-js が呼ぶ認証エンドポイントもスターターが用意します。Spring MVC と WebFlux の両方に対応。
  • @HibiraBroadcast はトランザクションのコミット後にアプリケーションイベントをブラウザへ送り、Webhook は WebhookEvent として @EventListener に届きます。
  • クライアントからは通知インボックスへの送信、プッシュ通知、承認のリクエストもできます。Spring Boot 3 と 4、Java 17 以降に対応。hibira-java は Spring なしでも使えます。

サインインすると、コード例にご自身のクラスターホストが入ります。 サインイン

  1. インストール

    <dependency>
      <groupId>io.hibira</groupId>
      <artifactId>hibira-spring-boot-starter</artifactId>
      <version>0.1.0</version>
    </dependency>
    
    <!-- environment -->
    HIBIRA_APP_ID=YOUR_APP_ID
    HIBIRA_KEY=YOUR_APP_KEY
    HIBIRA_SECRET=YOUR_APP_SECRET
    HIBIRA_HOST=ws.hibira.io
  2. 設定する

    @Component
    class Channels {
        @HibiraChannel("private-orders.{orderId}")
        boolean order(Principal user, long orderId) {
            return orders.isOwner(orderId, user.getName());
        }
    }
    
    @HibiraBroadcast(channels = "private-orders.#{orderId}", event = "order.shipped")
    record OrderShipped(long orderId, String carrier) {}
    
    // in a @Transactional service: sent once the transaction commits
    events.publishEvent(new OrderShipped(1042, "DHL"));
    hibira.trigger("orders", "order.created", Map.of("id", 1042)); // or send directly
  3. 使う

    const pusher = new Pusher('YOUR_APP_KEY', {
      wsHost: 'ws.hibira.io',
      cluster: '',
      enabledTransports: ['ws', 'wss'],
      channelAuthorization: { endpoint: '/hibira/auth', headers: { 'X-XSRF-TOKEN': csrfToken } },
      userAuthentication: { endpoint: '/hibira/user-auth', headers: { 'X-XSRF-TOKEN': csrfToken } },
    });
    pusher.signin(); // hibira.sendToUser(...) reaches this tab
    pusher.subscribe('private-orders.1042').bind('order.shipped', (order) => console.log(order));

始める前に

  • アプリのシークレットは、アプリの作成時とシークレットのローテーション時に一度だけ表示されます。サーバーにだけ置き、ブラウザやゲームのビルドには入れないでください。
  • Spring Security を使う場合は、ブラウザから CSRF トークンを送るか /hibira/auth と /hibira/user-auth を除外し、/hibira/webhooks はセッションや CSRF トークンなしで通してください。署名はエンドポイント自身が検証します。
  • Free プランでは、ページを読み込むすべてのオリジンをアプリの許可オリジンに登録してください(開発中は http://localhost:8080、その後は自分のドメイン)。"*" は有料プランで使えます。

ダッシュボードのアプリキーを使ってください。シークレットはサーバー側だけに置きます。チャンネル、イベント、認可エンドポイントは Pusher とまったく同じように動作します。 無料でアカウントを作成 →