在我们的应用程序中,我们需要让用户在使用基于表单的身份验证登录时选择所需的数据源,并且在使用基于表单的标准身份验证时,我不确定它是否完全可行。我听说可以使用TextInputCallback,但不知道如何(以及在哪里)实现它。
答案 0 :(得分:0)
在web.xml
中,最多可以有一个<login-config>
标记。这意味着您不能在一个Web应用程序中使用多个领域。因此,您需要一个或多或少的容器特定解决方案。
在Tomcat中有一个CombinedRealm可以使用其他领域。
包含一个或多个领域的领域实现。认证 按照配置的顺序尝试每个领域。如果有的话 领域对用户进行身份验证,然后验证成功。什么时候 结合领域用户名在所有组合中应该是唯一的 领域
可能符合您的要求。如果没有,并且用户存在于多个领域(具有相同的用户名),则可以使用前缀。例如,将"domain\myuser"
设置为用户名。
如果您使用嵌套的JDBCRealm
,您可以创建一个数据库视图,其中包含带前缀的用户名(只需将前缀与用户名连成),并将此视图用作用户表。
另一种方法是删除自定义领域中的前缀并调用容器的JDBCRealm
(或其他领域),但它需要一些编码。无论如何,它应该不会太难,已经存在的领域可能会与代表设计模式一起使用。