我们的tomcat服务器提供单个war文件,该文件由3个不同的相同数据库为3个租户提供服务。
计划是使用JNDI数据源(3个数据源)并使用抽象工厂来实例化该租户所需的子类。
希望使用容器管理的身份验证。
我们希望使用内置的Java安全注释,如@RolesAllowed等。身份验证是通过HTTP Basic Auth实现的。这对于一个租户(默认配置)非常有效。然而,我想不出一个好的解决方案,tomcat可以根据上下文(https://server/resources/CLIENT1/Blah)识别租户,然后查找适合CLIENT1/2/3等的JNDI。
有什么想法或建议?
发布于 2011-10-01 02:39:51
通过创建虚拟主机解决
为本地主机localhost2创建了两个虚拟主机
为UserDatabase UserDatabase2创建了两个领域(用于测试的UserDatabase领域)
两个主机都指向相同的文档根目录
通过调用http://localhost/service,使用realm UserDatabase,并调用http://localhost2/service,使用realm 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 "%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>
https://stackoverflow.com/questions/7606137
复制相似问题