2011-10-11 9 views
8

Mam dostęp do menedżera tomcat i mogę przesyłać pliki wojny. Jedna z tych wojen to statyczny projekt internetowy (spakowane pliki html + media, przemianowane na * .war). Chcę dodać plik Web-INF/web.xml do tej wojny, aby chronić zawartość za pomocą podstawowego http auth.W jaki sposób mogę zapewnić podstawowe uwierzytelnianie http dla webmasterów statycznych tomcatów bez zmiany tomcat-users.xml?

Wiem, jak to zrobić, dodając użytkowników globalnych i przypisując role w tomcat-users.xml, ale chcę, aby wszystkie nazwy użytkowników i hasła były zdefiniowane w moim pliku wojny.

  1. Czy można to zrobić bez dotykania kocurka tomcat-users.xml?
  2. A jeśli tak, w jaki sposób określić to w moim projekcie statycznym web.xml?

Thx, Juve

Odpowiedz

8

znalazłem rozwiązanie tutaj: http://wiki.metawerx.net/wiki/SecuringYourSiteWithContainerManagedSecurity

strona opisuje jak zdefiniować własną META-INF/context.xml wskazując na swój WEB-INF/users.xml. Niestety link do pliku users.xml musi być bezwzględny i nie chcę tworzyć żadnych założeń na temat ścieżek systemu operacyjnego/plików w moich plikach konfiguracyjnych.

Oto mój obecny WEB-INF/web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" 
    version="2.5"> 

    <display-name>SuperCoolTool</display-name> 
    <description>What an awesome app!</description> 

    <security-role> 
     <role-name>manager</role-name> 
    </security-role> 
    <security-role> 
     <role-name>keyuser</role-name> 
    </security-role> 

    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name> 
       Entire Application 
      </web-resource-name> 
      <url-pattern>/*</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>keyuser</role-name> 
      <role-name>manager</role-name> 
     </auth-constraint> 
    </security-constraint> 

    <login-config> 
     <auth-method>BASIC</auth-method> 
     <realm-name>Evaluation Area</realm-name> 
    </login-config> 

</web-app> 

dopasowanie META-INF/context.xml będzie wyglądać następująco:

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
    <Realm className="org.apache.catalina.realm.MemoryRealm" 
      pathname="[PATH-TO-YOUR-WEBAPP]/WEB-INF/users.xml"/> 
</Context> 
1

Jeśli znasz katalogu gdzie kocur stawia wszystkich wdrożonych aplikacji można używać ścieżek względnych (bo są rozwiązywane w odniesieniu do catalina.base env.variable, tj. tomcat home).

Na przykład, jeśli są wdrażane za pomocą Eclipse IDE, zwykle aplikacje są wdrażane w wtpwebapps, więc można użyć:

<Realm className="org.apache.catalina.realm.MemoryRealm" 
pathname="wtpwebapps/YOUR_APP_NAME/WEB-INF/users.xml"/> 

jeszcze nie idealne, ale przynajmniej nie używasz pełnych ścieżek.

Alternatywą byłoby wdrożenie własnego królestwa, które rozszerza MemoryRealm i wstępnie przetwarza ścieżkę przed wywołaniem super.setPathname();

Można również wybrać DataSourceRealm, który nie ma tego problemu i nadaje się do produkcji.

Dla podejścia niezależnego od kontenera serwletu można użyć architektury zabezpieczeń opartej na filtrach (np. Bezpieczeństwo wiosny, ...)

Powiązane problemy