0

アプリケーションのログイン画面がブラウザによってキャッシュされないようにするために、次のコードを使用しています。

public class SessionHandler implements Filter {


public void init(FilterConfig filterConfig) throws ServletException {
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
    if ((request instanceof HttpServletRequest) && (response instanceof HttpServletResponse)) {
    .
    .
    .
    try {
        HttpServletRequest httpReq = (HttpServletRequest) request;
        HttpServletResponse httpRes = (HttpServletResponse) response;

        //ignore images/css...etc
        if(!httpReq.getRequestURI().startsWith(httpReq.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)){
            //if login screen or home - don't cache 
            if(httpReq.getRequestURI().equalsIgnoreCase("/jsp/auth_login.faces")
                    || httpReq.getRequestURI().equalsIgnoreCase("/jsp/def_home.faces") ) {


                System.out.println(httpReq.getRequestURI() + " ----- " + " WON'T BE CACHED");

                httpRes.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
                httpRes.setHeader("Pragma", "no-cache"); // HTTP 1.0.
                httpRes.setDateHeader("Expires", 0); // Proxies.                    
            }
        }           
        filterChain.doFilter(request, response);
    ...

BalusCキャッシュを防ぐために、ここで回答した質問の1つで見つけたコードを使用します。私の問題は、ページがまだブラウザによってキャッシュされているように見えることです。Chromeデベロッパーツールを使用してページのHTMLヘッダーを表示すると、最初のページの読み込み時に次のように表示されます。

ここに画像の説明を入力してください

ログインに成功した後、ログインページに戻ると、次のように表示されます。

ここに画像の説明を入力してください

ログインページがキャッシュされている理由を誰かに教えてもらえますか?

4

1 に答える 1

0

アプリケーションがルートパスの下にデプロイされていない場合にロジックが使用されていなかった場合に、リクエストURIの暗黙的なルックアップが原因で問題が発生しました。

    if(!httpReq.getRequestURI().startsWith(httpReq.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)){
        //if login screen or home - don't cache 
        if(httpReq.getRequestURI().equalsIgnoreCase("/jsp/auth_login.faces")
                || httpReq.getRequestURI().equalsIgnoreCase("/jsp/def_home.faces") ) 

に変更されました:

    if(!httpReq.getRequestURI().startsWith(httpReq.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)){
        //if login screen or home - don't cache 
        if(httpReq.getRequestURI().endsWith("/jsp/auth_login.faces")
                || httpReq.getRequestURI().endsWith("/jsp/def_home.faces") ) 

そしてそれはすべて意図したとおりに機能しています。

于 2012-05-01T02:20:54.770 に答える