1

ブラウザーの [戻る] ボタンを無効にし、ユーザーをセッションの期限切れとして表示するようにフィルターを構成しました。アプリケーションプロトタイプで構成すると期待どおりに機能しますが、(Spring MVC) アプリケーションに組み込むと機能しません。

このようにフィルターを構成しました

<filter>
    <filter-name>backButtonFilter</filter-name>
    <filter-class>
        com.filters.BackButtonFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>backButtonFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

そして、私はこのようなフィルターコンテンツを持っていました

response.setHeader("cache-control", "no-cache, no-store, must-revalidate");
response.setHeader("pragma", "no-cache");
response.setDateHeader("expires", 0);
response.setHeader("Cache-Type", "private");

フィルターが実行されているかどうかを確認するために、ログ ステートメントを導入しました。私はそれが実行されているのを見ることができます。

なぜそうなってしまうのでしょうか?

4

2 に答える 2

2

ブラウザ側で HTTP ヘッダーをチェックアウトするためにFirebugを使用することをお勧めしますか? これにより、意図したとおりに機能しない理由を簡単に確認できるはずです。

編集注意すべきことの 1 つは、HTTP ヘッダーがすべて HTTP 本文の前に書き出されていることを確認することです。

于 2009-12-08T10:04:55.727 に答える
0

次のように、サーブレット コンテキスト内でインターセプターを構成してみてください。

<!--  configuration for handling browser back button  -->
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**/*"/>
        <beans:bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor">
            <beans:property name="cacheSeconds" value="0"/>
            <beans:property name="useExpiresHeader" value="true"/>
            <beans:property name="useCacheControlHeader" value="true"/>
            <beans:property name="useCacheControlNoStore" value="true"/>
        </beans:bean>
    </mvc:interceptor>
</mvc:interceptors>

ただし、セッションがライブかどうかに関係なく、ビュー (HTML または JSP) で検証または処理する必要があります。ビューで次のメタ タグを使用して、no-cache と no-store を指定できます。

<meta http-equiv="Cache-control" content="no-cache">

また

<META HTTP-EQUIV="Cache-Control" CONTENT="No-Cache,Must-Revalidate,No-Store">

GET を使用してフォームを送信すると、ユーザーは戻るボタンを押すことで結果の画面にいつでも移動できます。

POST を使用すると、ブラウザーはこれが不可能である可能性があると表示します。

于 2015-12-07T13:20:21.287 に答える