2011-09-30 170 views
1

我們的tomcat服務器提供單個war文件,由3個不同的數據庫爲3個租戶提供服務。製作Tomcat多租戶用於SaaS

計劃是使用JNDI數據源(3個數據源)並使用抽象工廠爲該租戶實例化必要的子類。

想使用容器管理的身份驗證。

我們希望使用像@RolesAllowed等內置Java安全註釋。Auth通過HTTP基本身份驗證。這適用於一個租戶(默認配置)。然而,我不能想到一個好的解決方案,其中tomcat可以根據上下文(https:// server/resources/CLIENT1/Blah)來識別租戶,然後查找適合CLIENT1/2/3的JNDI等。

想法或建議?

回答

3

通過創建虛擬主機

創建兩個虛擬主機 本地主機 localhost2

創建兩個領域(UserDatabase境界用於測試) UserDatabase UserDatabase2

解決

兩臺主機指向相同的文檔根

通過調用http://localhost/service,境界UserDatabase使用和 調用http://localhost2/service,境界UserDatabase2使用

由於Tomcat的文檔..

<Service name="Catalina"> 
      <Host appBase="webapps" autoDeploy="false" name="localhost" unpackWARs="true"> 
       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." resolveHosts="false" suffix=".txt"/> 
      </Host> 
      <Host appBase="webapps" autoDeploy="false" name="localhost2" unpackWARs="true"> 
       <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase2"/> 
      </Host> 
     </Engine>