为SaaS制作tomcat多租户

时间:2011-09-30 05:02:37

标签: tomcat

我们的tomcat服务器提供单个war文件,由3个不同的相同数据库为3个租户提供服务。

计划是使用JNDI数据源(3个数据源)并使用抽象工厂为该租户实例化必要的子类。

想要使用容器管理身份验证。

我们希望使用@RolesAllowed等内置Java安全注释.Auth是通过HTTP Basic Auth。这适用于一个租户(默认配置)。但是我想不出一个好的解决方案,tomcat可以根据上下文识别租户(https:// server / resources / CLIENT1 / Blah),然后为CLIENT1 / 2/3查找适当的JNDI等。

想法或建议?

1 个答案:

答案 0 :(得分:3)

通过创建虚拟主机解决

创建了两个虚拟主机 本地主机 localhost2

创建了两个领域(用于测试的UserDatabase领域) UserDatabase UserDatabase2

两个主机都指向同一个文档根

通过调用http://localhost/service,使用领域UserDatabase 调用http://localhost2/service,使用领域UserDatabase2

感谢Tomcat docs ..

  <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>