2009-08-05 9 views
3

Ich möchte einen Link auf eine sichere Seite meiner Anwendung auf einer meiner unsicheren Seiten einbetten. Der sichere Tomcat-Port wird in der Datei server.xml konfiguriert. In einigen Bereitstellungen ist es 443, 8443 usw. Also was ich brauche, ist eine Möglichkeit, den sicheren Port von Tomcat-Konfiguration zu lesen, um es in der Verbindung zu verwenden. Ist das möglich?Tomcat: Wie bekomme ich die sichere Portnummer in Java?

Alternativ können Sie auch einfach auf die Konfiguration server.xml (im Kontext der Anfrage) zugreifen und sie selbst analysieren, um die Portnummer herauszufinden, ist aber akzeptabel, aber weniger erwünscht.

Ich weiß, dass es mehrere Konnektoren geben könnte, und mehrere sichere, so überlasse ich es der Logik meines Programms zu entscheiden, welche zu wählen. Problem ist - wie bekomme ich diese Informationen?

Danke!

Antwort

3

Ich bin mir ziemlich sicher, dass es keine API dafür gibt. Sie könnten es wahrscheinlich über einen Servlet-Umgebungsparameter in web.xml konfigurierbar halten. Der offensichtliche Nachteil ist, dass Sie jetzt 2 Stellen haben, an denen die SSL-Portnummer konfiguriert ist.

Ein weiterer Ansatz ist die Sicherheit in web.xml iirc wie etwas zu konfigurieren

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>MyLoginPage</web-resource-name> 
     <url-pattern>/login</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

Sie können ganz normale Links zur Login-Seite verwenden, und Kater sollte automatisch redicts an den ssl-Anschluss senden, je nachdem welcher Port, ist konfigurieren zu.

+0

Ich denke, die Sicherheitsbeschränkung Konfiguration ist der beste Weg, um eine Seite zu zwingen, SSL zu verwenden. Wenn wir keine Seite dazu zwingen, ssl mit Sicherheitsbeschränkungen zu verwenden, können die Benutzer das https-Protokoll durch http ersetzen und ohne ssl verwenden. –

+0

+1 für VERTRAULICHEN Schutz –

1

Die einfachste Lösung ist wahrscheinlich, nach der server.xml-Datei in der init()-Methode eines Servlets zu suchen, sie zu parsen und die Portnummer irgendwo zu speichern. Das Servlet sollte automatisch geladen werden.

Eine andere Möglichkeit wäre, diesen Code in Ihr Build-Skript zu schreiben und den Wert zur Build-Zeit in die Datei web.xml zu kopieren. Das bedeutet jedoch, dass Sie denselben Tomcat lokal installieren müssen oder dass Sie über Fernzugriff auf die Datei server.xml verfügen müssen.

Ich bevorzuge die erste Lösung, da Sie das Servlet früh ausfallen lassen können und die Webapp nicht auftauchen wird, wenn der Port nicht bestimmt werden kann. Auf diese Weise haben Sie zu einem unbestimmten Zeitpunkt in der Zukunft keinen mysteriösen Fehler und Sie brauchen keine Zeitverschwendung bei jeder Anfrage (die Portnummer kann sich ohne einen Neustart von Tomcat nicht ändern).

Verwandte Themen