我们的tomcat服务器提供单个war文件,由3个不同的相同数据库为3个租户提供服务。
计划是使用JNDI数据源(3个数据源)并使用抽象工厂为该租户实例化必要的子类。
想要使用容器管理身份验证。
我们希望使用@RolesAllowed等内置Java安全注释.Auth是通过HTTP Basic Auth。这适用于一个租户(默认配置)。但是我想不出一个好的解决方案,tomcat可以根据上下文识别租户(https:// server / resources / CLIENT1 / Blah),然后为CLIENT1 / 2/3查找适当的JNDI等。
想法或建议?
答案 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 "%r" %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>