如何在OC4J上抑制jsessionID



我正在将JSF(myfaces、restfaces和richfaces)应用程序部署到OC4J。我不希望jsessionid出现在状态栏或URL地址中。我几乎在所有情况下都设法抑制住了它。我仍然有一个问题,那就是当第一次使用"干净"的浏览器访问网站时(没有缓存、历史记录等)。在这种情况下,jsessionid会出现在每个链接上,直到点击任何链接,然后它就会消失,直到浏览器的缓存再次清除,它才会回来(即使在随后的会话中)。

似乎其他人也遇到过这个问题,但我没有找到任何解决方案或解决办法:

  • Java Servlet-如何删除来自嵌入URL的jsessionid
  • 线程:如何在中隐藏JSESSIONID首页Url

servlet过滤器中的以下代码对我们很有用。其思想是通过使用自定义响应包装器来覆盖任何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; }
        };
}

相关内容

  • 没有找到相关文章

最新更新