2012-04-22 93 views
0

在我的网络应用程序中,我使用基于表单的登录。我有一个场景,除了登录config.xml中设置的表的数据之外,还必须验证其他数据库中存在的用户。j_security_check身份验证是否可以跟随其他Web身份验证机制?

所以,我在想这个流程:

用户试图访问受保护的资源 - >如果没有有效的会话,会被重定向到登录窗体 - >用户输入他的凭据 - > j_security_check认证为每个登录-config.xml - >如果验证成功,那么好,否则重定向到一个jsp错误页面,在那里我检查用户是否存在于另一个数据库(活动目录是特定的。我已经有代码来验证凭证),并创建一个成功的会话 - >否则重定向到错误页面

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

我已经阅读过一些文章,一旦认证授予j_security_check,就没有办法过度规则它。这是真的吗?

是否有任何其他可能的解决方案(除了从其他数据库添加到login-config.xml中指定的表或修改login-config.xml)?

(我正在使用Jboss)

谢谢。

回答

0

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

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

可能过滤器会捕获所有需要授权的URL。在你过滤器检查是否有布尔标志,所以你不要一次又一次地做数据库检查。

+0

感谢您的回复@Piotr Kochanski。 我已经尝试了一个替代可能不是最好的解决方案。 我们做了以下事情: j_security_check试图验证用户对我的本地数据库。 因为用户不存在,所以进入错误页面。在这里,我用servlet替换了错误页面,在另一个DB中检查用户,如果他是有效用户,我在本地数据库中创建一个条目然后再将这些凭据转发到j_security_check。现在该条目存在,用户被允许访问。 – Sudhakar 2012-05-16 15:56:30