2010-12-12 14 views

risposta

2

Purtroppo l'unico modo sono stato in grado di farlo al lavoro è stato quello di creare un file jass.conf e specificarla utilizzando:

  • Nei parametri java Tomcat:

    -Djava.security.auth.login.config==c:\\path\\To\\file.conf 
    
  • o dall'interno del codice Java:

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

Mi piacerebbe anche conoscere un modo migliore per specificare la configurazione. Voglio pacchettizzare quella configurazione nel mio WAR.

+0

bene, è un'opzione. Forse possiamo impostare questo parametro 'java.security.auth.login.config 'da qualche parte nel file' .properties' all'interno di WAR? Nel tuo caso questa impostazione sarà globale per tutte le applicazioni in Tomcat. – yegor256

+0

hai trovato un modo per fare riferimento al file .conf inserito nel tuo file WAR? – yathirigan

6

Ho avuto lo stesso problema e volevo vedere se non potevo impostare dinamicamente questa proprietà in base al classpath corrente (che si troverebbe all'interno della stessa guerra).

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); 
     } 
    } 
} 

Ovviamente, è necessario aggiungere l'ascoltatore a web.xml:

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

Quello che fa è impostata la proprietà java.security.auth.login.config su istanza della applicazione web se non è stata ancora definita. Ciò significa che è possibile gettarlo nella cartella di origine e caricarlo automaticamente se non diversamente ridefinito altrove. Ho provato questo e funziona su Tomcat 6.

Quindi, ad esempio se l'installazione del tuo tomcat era in "C: \ program files \ tomcat6 \" con la tua guerra distribuita in "C: \ program files \ tomcat6 \ webapps" \ mywar ", il percorso che avrebbe trovato sarebbe" C: \ program files \ tomcat6 \ webapp \ mywar \ WEB-INF \ classes ", che è sempre accurato. Non sono sicuro che questa soluzione funzioni anche con altre applicazioni web, ma immagino di sì, dato che login.conf sarà dove si trova la root del classpath.

Spero che questo aiuti!

+0

Sembra una soluzione dolce – sehe

4

È possibile incapsulare il client_jaas.conf nel vaso, e utilizzare il codice per specificare la configurazione dinamicamente

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