全て!ログアウト後も、gwt と Java で開発された私の作成した Web サイトでユーザーが操作を実行しています。そのユーザーを防ぐためにどのコードを書かなければなりませんか? 「ログアウト」後のユーザー操作を防ぐためのコードの書き方を意味します。ユーザーがログアウト後にページ上のリンクをクリックするときはいつでも、「表示するにはログインしていません」というメッセージが表示されるはずです。これは私の要件です。
5 に答える
アクティビティと場所のアプローチを使用して Web サイトを構成している場合。次に、各アクティビティの開始時に、セッションがまだ有効かどうかを確認する必要があります。そうでない場合は、goTo(new LoginPlace("login")) を使用するか、リダイレクト アプローチを使用して loginURL にリダイレクトできます。
このリンクを見てくださいこれは、GWTを使用してログインアプリを作成する方法を説明しています
またはコードのように..MyProfilePlace、MyProfileViewがある場合、MyProfileActivityは次のようになります
private ClientFactory clientFactory;
public MyProfileActivity(MyProfilePlace place, ClientFactory clientFactory) {
this.clientFactory = clientFactory;
}
@Override
public void start(AcceptsOneWidget containerWidget, EventBus eventBus) {
//pseudo code
if (session invalidated {
Window.alert("Sorry you are not logged in");
goTo(new LoginPlace("login"));
}
view = clientFactory.getMyProfileView();
view.setPresenter(this);
containerWidget.setWidget(view.asWidget());
System.out.println("Going to your profile");
}
彼をログアウト ページ/URL にリダイレクトしてから、彼のサーブレット セッションを無効にする必要があります。
1) サーブレット フィルター でセッションを無効にできますhttpServletRequest.getSession().invalidate()
。http://viralpatel.net/blogs/http-session-handling-tutorial-using-servlet-filters-session-error-filter-servlet-filter/
また
2) 単純なサーブレット経由 -サーブレット セッションの無効化
ユーザーが画面上のボタンをクリックしたときのこのシナリオを考えてみましょう。サーバーをヒットさせ、セッションが生きているかどうかを確認できます。
(jquery を使用してこれを行うことができます)
$('button').click(function(){
// ajax 呼び出しを行い、セッションが有効かどうかを確認します
});
これに代わるものとして、
セッションが有効な場合、サーバーを定期的にチェックする方法があります。これには、これをチェックするサーブレットメソッドが必要です。これにより、多くのサーバートリップが発生します。
別の方法として、クライアント側のタイマーをサーバーのタイマーと同期させることができます。
クライアントのコード:
import com.google.gwt.user.client.Timer;
パブリック クラス タイマー {
private static final Timer SESSION_MAY_HAVE_EXPIRED = new Timer() {
@Override
public void run() {
// The session may have expired.
// Go to Login
}
};
public static void renewSessionTimer() {
// First cancel the previous timer
SESSION_MAY_HAVE_EXPIRED.cancel();
// Schedule again for 5 minutes
SESSION_MAY_HAVE_EXPIRED.schedule(5 * 60 * 1000);
}
}
クライアントが RPC 呼び出しを実行すると、サーバー セッションのタイムアウトが更新されます。
クライアント側では、アクションの失敗時にコードを記述します。
my profile.myprofileService をクリックすると呼び出されるとします。次に、追加できます
myProfileService.getUserProfile(...) {
@Override
public void onSuccess(String result) {
ClientTimers.renewSessionTimer();
// Show user profile
}
@Override
public void onFailure(Throwable caught) {
if (sessionTimedOut()) {
// redirect to login
}
}
}
これが役立つことを願っています。乾杯 :)
実際にセッションとは何かを考えてみましょう
。では、セッションを維持する一般的な (唯一ではない) 方法を思い出してください。
クッキーのようなものを覚えているかもしれません。サーバーでセッションを削除/削除/クリアし、クライアント側でクッキーをクリアすると、セッションが事実上強制終了/削除されます。