2010-12-12 2 views

Antwort

2

Leider ist der einzige Weg, ich war in der Lage, es zu Arbeit zu bekommen war eine Datei jass.conf und geben Sie es zu schaffen entweder:

  • In den Tomcat Java-Parameter:

    -Djava.security.auth.login.config==c:\\path\\To\\file.conf 
    
  • oder aus dem Java-Code:

    System.setProperty("java.security.auth.login.config","c:\\path\\To\\file.conf"); 
    

Ich würde auch gerne eine bessere Möglichkeit kennen, die Konfiguration zu spezifizieren. Ich möchte diese Konfiguration in meinen WAR verpacken.

+0

gut angeben, dann ist es eine Option. Vielleicht können wir diesen 'java.security.auth.login.config' Parameter irgendwo in' .properties' Datei in WAR setzen? In Ihrem Fall ist diese Einstellung für alle Anwendungen in Tomcat global. – yegor256

+0

Haben Sie eine Möglichkeit gefunden, auf die .conf-Datei zu verweisen, die in Ihrer WAR-Datei enthalten ist? – yathirigan

6

Ich hatte das gleiche Problem und ich wollte sehen, ob ich diese Eigenschaft nicht dynamisch basierend auf dem aktuellen Klassenpfad (der sich innerhalb des Krieges selbst befinden würde) festlegen könnte.

public class SecurityListener implements ServletContextListener { 
    public SecurityListener() { 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent arg0) { 
    } 

    @Override 
    public void contextInitialized(ServletContextEvent arg0) { 
     if(System.getProperty("java.security.auth.login.config") == null) { 
      String jaasConfigFile = null; 
      URL jaasConfigURL = this.getClass().getClassLoader().getResource("login.conf"); 
      if(jaasConfigURL != null) { 
       jaasConfigFile = jaasConfigURL.getFile(); 
      } 
      System.setProperty("java.security.auth.login.config", jaasConfigFile); 
     } 
    } 
} 

Natürlich müssen Sie den Hörer auf Ihre web.xml hinzuzufügen:

<listener> 
    <listener-class>example.SecurityListener</listener-class> 
</listener> 

Was ist gesetzt, um die Eigenschaft java.security.auth.login.config bei der Instanziierung der Web-Anwendung, wenn sie noch nicht definiert wurde. Das heißt, Sie können es in Ihren Quellordner werfen und automatisch laden, wenn Sie nicht anderswo anders definiert werden. Ich habe dies getestet und es funktioniert auf Tomcat 6.

So, zum Beispiel, wenn Ihre Tomcat-Installation in "C: \ Programme \ Tomcat6 \" mit Ihrem Krieg in "C: \ Programme \ Tomcat6 \ Webapps bereitgestellt wurde \ mywar ", der Pfad, den es finden würde, wäre" C: \ Programme \ Tomcat6 \ Webapp \ Mywar \ WEB-INF \ Klassen ", die immer genau ist. Ich bin mir nicht sicher, ob diese Lösung auch mit anderen Webanwendungen funktioniert, aber ich würde mir das vorstellen, da login.conf sich dort befindet, wo der Klassenpfadstamm ist.

Hoffe, dass hilft!

+0

Sieht aus wie eine süße Lösung – sehe

4

Sie die client_jaas.conf im Glas einkapseln können, und den Code verwenden, um die Konfiguration dynamisch

System.setProperty("java.security.auth.login.config", XXX.class.getClassLoader().getResource("client_jaas.conf").toString());