2011-09-30 158 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>