Как подавить jsessionID на OC4J? - PullRequest
1 голос
/ 08 октября 2008

Я развертываю приложение JSF (myfaces, restfaces и richfaces) на OC4J. Я не хочу, чтобы jsessionid появлялся в строке состояния или URL-адресе. Мне удалось подавить это почти во всех случаях. Единственный случай, с которым у меня все еще есть проблемы, - это когда сайт впервые посещают с помощью «чистого» браузера (без кеша, истории и т. Д.). В этом случае jsessionid появляется в каждой ссылке до тех пор, пока не будет нажата какая-либо ссылка, затем исчезнет и не вернется (даже в последующих сеансах), пока кэш браузера не будет очищен снова.

Кажется, другие сталкивались с этой проблемой, но я не нашел никаких решений или обходных путей:

1 Ответ

2 голосов
/ 12 апреля 2009

Следующий код в фильтре сервлетов сработал для нас. Идея состоит в том, чтобы переопределить любую логику перезаписи 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; }
        };
}
...