0
私は、RESTバックエンド用の認証フィルタを実装しようとするとthis(かなり良い)ガイドに従っています。しかし、Firebaseの認証モジュールを使用したいので、私の 'verify token'はfirebaseを使ってトークンを検証する必要があります。FirebaseでJAX-RSバックエンドで承認リクエストフィルタを設定する
私はこのようにそれを実装しようとしました:
private void validateToken(String token, final ContainerRequestContext requestContext) throws Exception {
FirebaseAuth.getInstance().verifyIdToken(token)
.addOnSuccessListener(new OnSuccessListener<FirebaseToken>() {
@Override
public void onSuccess(FirebaseToken decodedToken) {
System.out.println("success");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
System.out.println("fail" + e);
requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
}
}).addOnCompleteListener(new OnCompleteListener<FirebaseToken>() {
@Override
public void onComplete(@NonNull Task<FirebaseToken> task) {
}
});
}
をしかし、問題は、それが今に見えるよう、要求が通過し、ONFAILUREますので、リスナーが、別のスレッドで実行されている、もちろんあるありますリスナーはそれを中止することはできません。
私はそれを下にスリープタイマーを追加するだけで動作させましたが、もっと良い解決策が必要です。私はを使ってメインスレッドをロックしようとしましたが、onCompleteListenerでロックを解除しようとしましたが、動作させることができませんでした。
これを回避する良い方法はありますか?
ありがとうございます!
あなたが完了ゴマブロックしたい場合は、[ 'CountDownLatch']を使用することができます(https://docs.oracle.com/javase/:興味がある人々のために
、私の解決策は次のようになります7/docs/api/java/util/concurrent/CountDownLatch.html) –
ありがとう!私はCountDownLatchを少し見てきましたが、そのように実装する方法を理解することはできませんでした。しかし、私は間違いなくそれを可能にすると思うならば、もう一度それを与えるでしょう。 – Lars