我正在向OC4J部署一个JSF(myfaces,restfaces和richfaces)应用程序。我不希望jsessionid出现在状态栏或URL地址中。我几乎在所有情况下都设法压制它。我仍然遇到问题的一个案例是首次使用“干净”浏览器访问该站点(没有缓存,历史记录等)。在这种情况下,jsessionid出现在每个链接上,直到点击任何链接,然后它就会消失,并且不会再返回(即使在后续会话中),直到再次清除浏览器的缓存。
似乎其他人遇到了这个问题,但我没有找到任何决议或解决方法:
答案 0 :(得分:2)
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; }
};
}