【问题标题】:Can j_security_check authentication be followed by another web authentication mechanism?j_security_check 身份验证后可以跟另一个 Web 身份验证机制吗?
【发布时间】:2012-05-03 04:46:26
【问题描述】:

在我的网络应用程序中,我使用基于表单的登录。我有一个场景,除了 login-config.xml 中设置的表的数据之外,我还必须验证存在于不同数据库中的用户。

所以,我在想这个流程:

用户尝试访问受保护的资源 -> 如果没有活动会话,将被重定向到登录表单 -> 用户输入他的凭据 -> j_security_check 根据 login-config.xml 进行身份验证 -> 如果身份验证成功,很好,否则重定向到一个jsp错误页面,我检查用户是否存在于另一个数据库中(具体来说是活动目录。我已经有验证凭据的代码)并成功创建会话 -> 否则重定向到错误页面

上面以粗体突出显示的部分是否可能?

我在一些文章中读到,一旦对 j_security_check 进行了身份验证,就无法超越它。是真的吗???

这个问题还有其他可能的解决方案吗(除了将其他数据库中的用户添加到login-config.xml中指定的表或修改login-config.xml)?

(我正在使用 Jboss)

谢谢。

【问题讨论】:

    标签: jakarta-ee jaas j-security-check


    【解决方案1】:

    创建 Servlet 过滤器,该过滤器将捕获在 j_security_check 之后用户被重定向到的 URL。在此过滤器中检查其他数据库中的用户凭据。

    如果检查成功,则添加反映该事实的会话布尔值。如果检查失败,删除会话(HttpSession.invalidate() 方法)并将用户重定向到错误页面。

    过滤器可能会捕获所有需要授权的 URL。在您过滤器中检查是否有布尔标志,因此您不会一次又一次地进行数据库检查。

    【讨论】:

    • 感谢@Piotr Kochanski 的回复。我尝试了一种替代方案,可能不是最好的解决方案。我们所做的如下: j_security_check 尝试根据我的本地数据库验证用户。由于用户不存在,进入错误页面。在这里,我用一个 servlet 替换了错误页面,在那里我检查另一个数据库中的用户,如果他是有效用户,我将在我的本地数据库中创建一个条目并然后再次将这些凭据转发给 j_security_check。现在该条目已存在,允许用户访问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 2020-07-24
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    相关资源
    最近更新 更多