2017-06-12 1 views
0

je dois migrer l'un de nos code personnalisé de la vanne de Tomcat 7 à Tomcat 8.5:Tomcat 8.5.x: Migrer javacode Valve de Tomcat 7

import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpSession; 

import org.apache.catalina.Container; 
import org.apache.catalina.Manager; 
import org.apache.catalina.Session; 
import org.apache.catalina.connector.Request; 
import org.apache.catalina.connector.Response; 
import org.apache.catalina.valves.ValveBase; 

public class SessionManagerValve extends ValveBase { 

    @Override 
    public void invoke(Request request, Response response) throws IOException, ServletException { 
     // ... 
    } 

    public HttpSession findSession(String id, boolean updateLastAccessTime) { 
     try { 
      Container container = getContainer(); 

      // works with Tomcat 7.x, but not with Tomcat 8.5 anymore... 
      Manager man = container.getManager(); 

      Session sess = man.findSession(id); 
      return sess.getSession(); 
     } catch (Exception e) { 
      return null; 
     } 
    } 
} 

L'interface Container ne fournit pas la méthode getManager() plus. Selon le guide de migration Tomcat, l'accès au Manager est passé de Container à Context.

Quelqu'un peut-il me donner un indice sur la façon d'accéder au Manager depuis l'objet ValveBase?

Merci à l'avance, Rainer

EDIT: La configuration de contexte est - comme souligné à juste titre dans la réponse -

<Context path="" ...> 
    <Valve className="SessionManagerValve" /> 
</Context> 

Répondre

1

En supposant que votre Valve est au niveau Context (il faudrait être pour le code ci-dessus pour travailler) alors vous avez besoin:

((Context) getContainer()).getManager(); 
+0

Correct, getContai ner() me donne une instance de org.apache.catalina.core.StandardContext dans ce cas. Je vous remercie! –