Wie stelle ich eine einfache HTTP-Authentifizierung für statische Tomcat-Webapps bereit, ohne die Datei tomcat-users.xml zu ändern?

9

Ich habe Zugriff auf den Tomcat-Manager und kann Kriegsdateien hochladen. Einer dieser Kriege ist ein statisches Webprojekt (gezipptes HTML + Mediendateien, umbenannt in * .war). Ich möchte eine Web-INF / web.xml-Datei zu diesem Krieg hinzufügen, um den Inhalt mit grundlegenden HTTP-Auth zu schützen.

Ich weiß, wie man das tut, indem man globale Benutzer hinzufügt und Rollen in tomcat-users.xml zuweist, aber ich möchte, dass alle Benutzernamen und Passwörter in meiner WAR-Datei definiert sind.

  1. Kann dies geschehen, ohne den Tomcat tomcat-users.xml ?
  2. zu berühren
  3. Und wenn ja, wie gebe ich das in meinem statischen Projekt web.xml ?
  4. an

Thx, Juve

    
Juve 11.10.2011, 12:27
quelle

2 Antworten

9

Ich habe hier eine Lösung gefunden: Ссылка

Die Seite beschreibt, wie Sie Ihre eigene META-INF/context.xml definieren, die auf Ihre eigene WEB-INF/users.xml verweist. Leider muss die Verbindung zur Datei users.xml absolut sein, und ich möchte keine Annahmen über die OS / Dateisystempfade in meinen Konfigurationsdateien machen.

Hier ist meine aktuelle WEB-INF/web.xml :

%Vor%

Ein passendes META-INF/context.xml würde so aussehen:

%Vor%     
Juve 14.10.2011, 13:42
quelle
1

Wenn Sie das Verzeichnis kennen, in dem tomcat alle bereitgestellten Anwendungen ablegt, können Sie relative Pfade verwenden (weil sie in Bezug auf catalina.base env.variable, d. h. tomcat home, aufgelöst werden).

Wenn Sie z. B. mit der Eclipse-IDE bereitstellen, werden Apps normalerweise in wtpwebapps bereitgestellt. Sie können also Folgendes verwenden:

%Vor%

Noch nicht perfekt, aber zumindest benutzt du keine vollständigen Pfade.

Eine Alternative wäre, ein eigenes Realm zu implementieren, das MemoryRealm erweitert und den Pfadnamen vor dem Aufruf von super.setPathname ();

vorverarbeitet

Sie können auch einen DataSourceRealm verwenden, der dieses Problem nicht aufweist und für die Produktion geeignet ist.

Für den Servlet-Container-unabhängigen Ansatz können Sie ein Sicherheits-Framework verwenden, das auf Filtern basiert (z. B. Spring-Sicherheit, ...)

    
Jorge Simão 01.08.2012 13:36
quelle