1

JSF(myfaces、restfaces、およびrichfaces)アプリをOC4Jにデプロイしています。jsessionidをステータスバーやURLアドレスに表示したくありません。ほとんどの場合、なんとか抑制できました。私がまだ問題を抱えている1つのケースは、サイトが「クリーンな」ブラウザ(キャッシュ、履歴などなし)で最初にアクセスされたときです。この場合、jsessionidは、いずれかのリンクがクリックされるまですべてのリンクに表示され、その後消えて、ブラウザのキャッシュが再びクリアされるまで(後続のセッションでも)戻りません。

他の人がこの問題に遭遇したようですが、解決策や回避策は見つかりませんでした。

4

1 に答える 1

2

サーブレット フィルターの次のコードは、うまくいきました。アイデアは、カスタム応答ラッパーを使用して、URL 書き換えロジックをオーバーライドすることです。

public void doFilter( 
    ServletRequest req, 
    ServletResponse resp, 
    FilterChain filterChain ) 
    throws IOException, ServletException
{
    if ( req instanceof HttpServletRequest && 
         resp instanceof HttpServletResponse )
    {
        doFilter( 
            (HttpServletRequest) req, 
            (HttpServletResponse) resp, 
            filterChain );
    }
    else
    {
        filterChain.doFilter( req, resp );
    }
}

private void doFilter( 
    HttpServletRequest request, 
    HttpServletResponse response, 
    FilterChain filterChain ) 
    throws IOException, ServletException
{
    RequestHandler requestHandler = getRequestHandler( request );

    HttpServletResponse wrappedResponse = getWrappedResponse( response );

    filterChain.doFilter( request, wrappedResponse );
}

private HttpServletResponse getWrappedResponse( 
    HttpServletResponse response )
{
    return
        new HttpServletResponseWrapper( response )
        {
            public String encodeRedirectUrl( String url ) { return url; }

            public String encodeRedirectURL( String url ) { return url; }

            public String encodeUrl( String url ) { return url; }

            public String encodeURL( String url ) { return url; }
        };
}
于 2009-04-12T00:03:30.903 に答える