j2ee webapp A 使用 web 应用 B 的身份验证工具

Posted

技术标签:

【中文标题】j2ee webapp A 使用 web 应用 B 的身份验证工具【英文标题】:j2ee webapp A using authentication facility of web app B 【发布时间】:2011-03-21 12:05:38 【问题描述】:

任何尝试访问我的 webapp A 上的某些安全资源的用户都需要通过 webapp B 进行身份验证。B 可以访问用户凭据密码等,我想知道正确的方法。

另一种选择是使用过滤器保护我的安全页面。如果未经身份验证的用户从 A 访问 A 安全资源,过滤器会捕获请求并将浏览器重定向到 B 的登录页面。

B 将用户登录并将浏览器重定向到 A 服务器上的安全页面,以及一些 B 的会话 id 和一些指示用户已登录的令牌。

过滤器捕获从 B 到 A 的重定向,从 B 的 reuest 的标头中提取身份验证令牌信息,并将用户记录到 A 的会话中。

来自浏览器的所有后续请求都将传递 B 设置的令牌。过滤器看到此令牌并认为用户已登录。

这听起来很正常还是我错过了重要的事情?

此外,servletfilter 是完成此流程的最佳方式吗? web.xml 中的声明性安全性如何?如何使用声明式安全性完成相同的流程?

【问题讨论】:

【参考方案1】:

感谢您的回复,Vineet。 可能我没说清楚,我换个说法: A 是一个无法访问用户名密码的 webapp B 是一个可以访问用户名密码的 webapp 登录页面位于 B 上,A 只是重定向到它。

它们都生活在同一个域中,但不能共享会话等,实际上它们是完全独立的应用程序。

A 想要使用 B 对用户名/密码的访问权并为用户创建登录凭据。

主体不直接传播,而是发回经过身份验证的用户 ID。

我知道使用 B 登录将在 B 中创建一个经过身份验证的会话,并且该会话与 A 无关。A 试图做的是:代替直接访问用户凭据,它让 B 做所以并使用来自 B 的 yea 或 nea 创建经过身份验证的会话。毕竟什么是经过身份验证的会话 - 只是一个包含用户信息的会话吗?

我也想知道“身份断言”以及它与此有何关系...

【讨论】:

【参考方案2】:

要使提议的方案起作用,您需要配置容器以在 Web 应用程序之间共享会话。除非我弄错了,否则这并非在所有容器中都可用,并且配置步骤因容器而异。在没有会话共享的情况下,Web 应用程序 B 将根本无法识别应用程序 A 创建的会话。WebLogic Server 允许会话共享;其他人可能会取得不同程度的成功。

您也许可以通过 Web 应用 B 中的声明式安全性来实现此方案(在跨应用程序共享会话之后) - B 的登录表单将具有将用户重定向到应用程序 A 的逻辑,他/她将在该应用程序 A 中进行身份验证。不用说,我还没有尝试过。使用共享会话时需要注意的一点是,主体是否被传播,或者是否可以从第一个应用程序中用于第二个应用程序。

【讨论】:

以上是关于j2ee webapp A 使用 web 应用 B 的身份验证工具的主要内容,如果未能解决你的问题,请参考以下文章

手动创建Servlet--J2EE学习笔记

Amazon WebServices 中 Tomcat 上 J2EE webapp 的设计注意事项

给Java新手的一些建议----Java知识点归纳(J2EE and Web 部分)

J2EE——servlet初识

j2ee之springMVC中的web.xml一个简单调用

现在有这样一个J2EE项目,使用tomcat6 + mysql5+struts2 开发的项目,如何完成打包并部署到服务器上,