2010-09-18 74 views
0

在您的幫助下,我已成功解決了一個問題,我詢問了here。我爲Web應用程序開發了一個定製的Tomcat身份驗證器,並且當前身份驗證器及其配置文件位於%CATALINA_HOME%\lib\目錄中。不幸的是,身份驗證器配置文件幾乎與Web應用程序的配置文件(位於%CATALINA_HOME%\webapps\myapp)中的驗證器的開發副本相同,並且配置文件顯然都共享相同的DB連接設置。這很不方便,因爲共享唯一的配置文件將是最好的。Tomcat下的Web應用程序特定表單驗證器6

我覺得有可能是解決該問題有兩種方法:

  1. 找到webapps目錄myapp存在某種方式在Tomcat啓動,然後讀取應用程序配置文件(從目前的情況出發,而myapp\WEB-INF\web.xml配置正確)。當然,不幸的是這需要Tomcat重啓。
  2. 可能有一種方法可以將表單驗證器放入相應的Web應用程序目錄,以便能夠直接讀取共享配置文件。也許這可能會消除Tomcat重啓並允許簡單的重新部署。

我想更喜歡第二種解決方案,但如果可能的話,但我不確定。哪種方式更好,如果它們都存在?還是有沒有其他的甚至更好的解決方案,而不是web應用程序特定的驗證器到%CATALINA_HOME\lib%

在此先感謝並對我的英語感到抱歉。

+0

是否有任何理由爲什麼Web應用程序不能只調用Tomcat中的身份驗證器? (和你的英語很好。) – 2010-09-18 23:21:11

+0

@ThorbjørnRavn Andersen:謝謝。目前該web應用程序已經配置了'context.xml'來使用該認證器。唯一的問題是,Web應用程序是基於webapps-directory的,而驗證器是'%CATALINA_HOME%\ lib'-directory-base,儘管驗證器的業務邏輯取決於該應用程序。如果他們的配置文件只是一對而已,它可能是完美的。問題的原因是,部署Web應用程序始終需要更新認證程序設置才能變得相同。 '%CATALINA_HOME%\ lib'只是用認證配置文件「寵壞了」。 – 2010-09-19 07:20:42

回答

0

啊,這一切都容易!主要想法是通過authenticate(...)中的(JDBCRealm) context.getRealm()對象獲取連接字符串。這足以解決我的問題。

0

您有一個代碼重複的情況。

我會建議重構代碼,以便Tomcat擁有所有必要的代碼以驗證其身份,然後重構您的應用程序以僅使用Tomcat驗證代碼。

如果您的應用程序無法使用Tomcat認證,那麼您至少可以將公共代碼(包括其配置文件)移動到Tomcat中,然後使用公共代碼。

+0

唯一重複的是位於'CATALINA_HOME \ lib \ myapp.conf'(我相信應該只有JAR文件)和'CATALINA_HOME \ webapps \ myapp \ WEB-INF \ myapp.conf'中的多個(兩個)配置。兩者都包含相同的DB連接屬性。但最近我有一個模糊的(第一次看)bug,因爲我忘記部署後更新這兩個文件。因此,我想將驗證器配置以某種方式放入相應的Web應用程序目錄中,以使配置文件具有唯一性。對不起,我無法做得更好。:( – 2010-09-19 08:56:15

+0

您是否考慮過將配置加載到容器中的PRoperties對象中,並通過JNDI將其提供給您的應用程序? – 2010-09-19 09:09:10

+0

@ThorbjørnRavn Andersen:不,實際上我不熟悉JNDI,並且暫時無法弄清楚它是如何幫助我在驗證器和Web應用程序之間共享數據庫連接設置的。 – 2010-09-19 09:24:09

相關問題