2010-12-12 180 views

回答

2

不幸的是我能得到它的工作的唯一方法是創建一個文件jass.conf並使用指定它可以:

  • 在Tomcat的Java參數:

    -Djava.security.auth.login.config==c:\\path\\To\\file.conf 
    
  • 或來自Java代碼:

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

我也想知道一個更好的方式來指定配置。我想在我的WAR中打包該配置。

+0

嗯,這是一個選項。也許我們可以在WAR內的'.properties'文件的某處設置這個'java.security.auth.login.config'參數。在你的情況下,這個設置對於Tomcat中的所有應用程序都是全局的。 – yegor256 2011-03-04 07:00:58

+0

你有沒有找到一種方法來引用放在WAR文件中的.conf文件? – yathirigan 2015-10-23 11:50:10

6

我有同樣的問題,我想看看如果我不能根據當前的類路徑(這將位於戰爭本身內)動態設置此屬性。

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

顯然,你需要將監聽器添加到你的web.xml:

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

這樣做是java.security.auth.login.config時的實例化設置的屬性Web應用程序,如果它尚未定義。這意味着你可以把它放到你的源文件夾中,如果沒有其他地方重新定義,它會自動加載它。我測試了這個,它可以在Tomcat 6上運行。

因此,例如,如果您的Tomcat安裝位於「C:\ program files \ tomcat6 \」中,並且您的戰爭部署在「C:\ program files \ tomcat6 \ webapps \ mywar「,它會找到的路徑是」C:\ program files \ tomcat6 \ webapp \ mywar \ WEB-INF \ classes「,它總是準確的。不知道這個解決方案是否也適用於其他Web應用程序,但我會這麼想,因爲login.conf將會是類路徑根的地方。

希望有幫助!

+0

看起來像一個甜蜜的解決方案 – sehe 2012-07-19 09:39:56

4

您可以封裝罐中的client_jaas.conf,並使用代碼指定配置動態

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