3

状況があります-誰かがブラウザで「戻る」ボタンをクリックすると、ページからログアウトした後、自動的に戻るページに戻ります。Logout.java (サーブレット) では、次を使用します。

session.invalidate();
request.getRequestDispatcher("index.jsp").forward(request,response);

すべて正常に動作しています。しかし、ログアウト後、ブラウザの [戻る] ボタン (左上隅) をクリックすると、元の場所に戻ります。[戻る] をクリックした場合は、[セッションが期限切れです] または [ログイン] などと言わなければなりません。どうやってするの。貴重なご意見をお聞かせください。
私はちょうどこれについて読んだ & 私はサーブレット FilterURL.java を作成します:

public class FilterURL extends HttpServlet implements Filter {
    @Override
    public void init(FilterConfig config) throws ServletException {
    //
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
      HttpServletResponse hsr = (HttpServletResponse) res;
      hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
      hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
      hsr.setDateHeader("Expires", 0); // Proxies.
      chain.doFilter(req, res);
    }

    @Override
    public void destroy() {
    //
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    //
    }
}

そして私のweb.xml:(web-appの下)

<filter>
    <filter-name>FilterURL</filter-name>
    <filter-class>com.filter.url.sys.FilterURL</filter-class>
</filter>
<filter-mapping>
    <filter-name>FilterURL</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

しかし、それは機能しません。私は何を間違えていますか??
私はこのページからそれを読みました:

  1. Java でサーブレット フィルタを使用して受信サーブレット リクエスト URL を変更する方法は?
  2. ログアウト後にユーザーが以前にアクセスした保護されたページを表示できないようにする
  3. http://tutorials.jenkov.com/java-servlets/servlet-filters.html
  4. サーブレット セッション ログアウト 後 ブラウザ の 戻る ボタン を 押す と セキュア ページ が 再び 表示 さ れる
4

4 に答える 4

4

filter

HttpSession session = request.getSession(false);
                                 // don't create if it doesn't exist
if(session != null && !session.isNew()) {
    chain.doFilter(request, response);
} else {
    response.sendRedirect("/index.jsp");
}

サーブレットと jsp でのセッションのチェックを参照してください

于 2013-04-24T13:44:09.303 に答える
1

セキュリティを強化するために、サーブレット フィルタ チェーンを使用します。

ソース オラクル

説明はスタックオーバーフローにあります

Java でサーブレット フィルタを使用して受信サーブレット リクエスト URL を変更する方法は?

チュートリアルについては、このリンクを参照してください。

http://viralpatel.net/blogs/tutorial-java-servlet-filter-example-using-eclipse-apache-tomcat/

良いもの- http://tutorials.jenkov.com/java-servlets/servlet-filters.html

フィルターは、さまざまな種類の機能を実行できます。このホワイト ペーパーでは、イタリック体の項目の例について説明します。

  • ユーザー ID に基づく認証ブロック要求。

  • ロギングと監査 - Web アプリケーションのユーザーの追跡。

  • 画像変換 - スケーリング マップなど。

  • データ圧縮 - ダウンロードを小さくします。

  • ローカリゼーション - リクエストとレスポンスを特定のロケールに向けること。

  • XML コンテンツ ターゲット Web アプリケーションの XSL/T 変換は、複数の種類のクライアントに応答します。

公式ドキュメントを読むhttp://www.oracle.com/technetwork/java/filters-137243.html

于 2013-04-24T13:40:07.583 に答える
1

サーバーからページを再度ロードしますか? 次に、ユーザー認識とセッション コードを確認する必要があります。他の回答でいくつかのヒントが与えられています。

ページがブラウザのキャッシュにある場合、運が悪くても、ブラウザはそれを再び表示できます。結局のところ、それはローカル ドキュメントです。

ただし、いくつかの回避策が考えられます (ユーザーとセッションの認識が機能する場合)。

  • ブラウザーが毎回ページをリロードするようにアドバイスされるように、有効期限、キャッシュ制御の HTTP ヘッダーを設定します。ブラウザの動作に依存します。
  • すべて JavaScript に移行します。つまり、Single-Page-Web-Application を構築して、戻るボタンの機能を完全に削除します。場合によっては有効なアプローチですが、常にではありません。一意の URL で到達できるはずのリソースを操作する場合、そうではありません。
  • ログアウトと新しいページの間でリダイレクトを行います (redirect-after-post など)。これにより、[戻る] ボタンを 1 回クリックすると、ユーザーはリダイレクト ページに移動し、ログアウト後にユーザーを送信したページにすぐに戻ります。
  • すべてのページで Ajax を使用して、ユーザーがまだログインしているかどうかを確認します。そうでない場合は、ログイン ページにリダイレクトします。
于 2013-04-24T13:53:07.360 に答える