【问题标题】:Passing additional parameters to j_security_check将附加参数传递给 j_security_check
【发布时间】:2011-12-21 10:04:59
【问题描述】:

在我们的应用程序中,我们需要让用户在使用基于表单的身份验证登录时选择所需的数据源,我不确定在使用标准的基于表单的身份验证时是否可能。我听说可以使用 TextInputCallback,但不知道如何(以及在​​何处)实现它。

【问题讨论】:

  • TextInputCallback 是 JAAS 的一部分。

标签: java parameters jaas j-security-check


【解决方案1】:

在web.xml 中最多可以有一个<login-config> 标签。这意味着您不能在一个 Web 应用程序中使用多个领域。因此,您或多或少需要一个特定于容器的解决方案。

在Tomcat中有一个CombinedRealm可以使用其他领域。

包含一个或多个领域的领域实现。验证 按照配置的顺序对每个领域进行尝试。如果有的话 领域对用户进行身份验证,然后身份验证成功。什么时候 组合领域的用户名在所有组合中应该是唯一的 领域。

也许它符合您的要求。如果不是并且用户存在于多个领域(使用相同的用户名),您可以使用前缀。例如将"domain\myuser" 设置为用户名。

如果您使用嵌套的JDBCRealms,您可以创建一个包含前缀用户名的数据库视图(只需将前缀与用户名连接)并将此视图用作用户表。

另一种方法是删除自定义领域中的前缀并调用容器的JDBCRealm(或其其他领域),但它需要一些编码。无论如何,这应该不会太难,已经存在的领域可能可以与委托设计模式一起使用。

【讨论】:

  • 如果我的想法正确,我需要修改数据库来执行此操作。但是如何使用 Spring 的 AbstractRoutingDataSource 在它们之间切换呢?这是一个迁移/集成项目,因此我们无法更改数据库设置,也无法添加任何新内容。
  • 如果您使用CombinedRealm 并且数据库不包含相同的用户名,您不必创建新视图。如果您使用CombinedRealm 并且数据库包含相同的用户名,您可以编写自定义领域(无需修改数据库)。我什么都不知道 Spring 的 AbstractRoutingDataSource.
猜你喜欢
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 2011-07-10
  • 2015-12-30
  • 2015-03-03
相关资源
最近更新 更多