2008-10-08 11 views
1

Je suis en train de déployer une application JSF (myfaces, restfaces et richfaces) sur OC4J. Je ne veux pas que jsessionid apparaisse dans la barre d'état ou l'adresse URL. J'ai réussi à le supprimer dans presque tous les cas. Le seul cas avec lequel j'ai encore des problèmes est lorsque le site est visité pour la première fois avec un navigateur "propre" (sans cache, historique, etc.). Dans ce cas, jsessionid apparaît sur chaque lien jusqu'à ce que l'on clique sur un lien, puis il disparaît et ne reviendra pas (même dans les sessions suivantes) jusqu'à ce que le cache du navigateur soit à nouveau désactivé.Comment jsessionID peut-il être supprimé sur OC4J?

Il semble d'autres se sont heurtés à ce problème, mais je ne trouve pas de résolutions ou travail contournements:

Répondre

2

Le code suivant dans un filtre de servlet a travaillé pour nous. L'idée remplace toute logique de réécriture d'URL en utilisant un encapsuleur de réponse personnalisé.

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; } 
     }; 
}