1

私はActivity/PlaceGWTプロジェクトで使用しています.現在のユーザーがログインしていない場合、彼が some に移動するPlaceと、ユーザーはログインページにリダイレクトされますPlace. このロジックを効率的に実装する方法は?

PlaceChangeRequestEvent をフックしようとしました:

        eventBus.addHandler(PlaceChangeRequestEvent.TYPE,new PlaceChangeRequestEvent.Handler() {
            @Override
            public void onPlaceChangeRequest(PlaceChangeRequestEvent event) {
                Place newPlace = event.getNewPlace();
                if (newPlace instanceof MyProtectedPlace && userNotLoggedIn()) {
                    event.goTo(new LoginPlace());
                }
            }
        });

残念ながら、進行中のリクエストMyProtectedPlaceがキャンセルされていないため、機能しません。はい、ユーザーが現在の場所から離れようとしているときにこれを確認できますが、チェックロジックがプログラム全体に散らばっているため、これは効率的ではありません。

ありがとう。

4

1 に答える 1

0

少し違うやり方ができると思います。ログイン後にのみ SecuredPlace という場所にアクセスできるようにしたいとします。対応する SecuredActivity があります。

できることは、SecuredActivity を開始するときに、ユーザーがログインしているかどうかを確認することです。ログインしていない場合は、placeController.goTo(new LoginPlace ()) を実行します。

ユーザーがログインしている場合は、続行します。開始はフレームワークによって呼び出されるため、このステップをスキップする方法はなく、私の意見では十分に保護されています。

ただし、場所ではなく、バックエンドへのネットワーク呼び出しにセキュリティを実装する必要があります。バックエンドを呼び出すたびに、ユーザーが認証され、正しい資格情報を持っていることを確認します。コールバックをインターセプトできない場合は、それが 403 エラーであることを確認してから、ログイン ページに自動的にリダイレクトします。バックエンド コールが保護されていない場合、場所を保護しても意味がないからです。

于 2013-12-26T23:24:00.143 に答える