1

我有一个 Web PHP Web 应用程序,它有一个指向 Java Web 应用程序的链接。php 应用程序有一个登录页面和一个指向 java 应用程序的链接,但并不是每个用户都有权访问 java web 应用程序。我试图做的是将用户凭据从 php 应用程序发送到 java 应用程序,然后 java 应用程序检查凭据以及用户是否正确登录。我正在考虑使用http标头来做到这一点。

所以我的问题是如何将用户凭据从 PHP 应用程序发送到 Java 应用程序?

如果有帮助,我正在使用一个名为 Vaadin 的 Java Web 框架。

4

2 回答 2

3

从 PHP 应用程序到 java 应用程序执行正常的 POST 请求。这可以像在 PHP 应用程序中拥有一个普通的 HTML 表单一样简单地完成,将表单的方法设置为“POST”并将操作设置为 java 应用程序的 URL。如果您想在 Vaadin 应用程序中捕获 HTTP 参数,您可以使用请求处理程序 ( https://vaadin.com/book/vaadin7/-/page/advanced.requesthandler.html ) 来实现。

然后是一些建议或至少要考虑的事情。如果您的登录页面在 PHP 应用程序中并且您的“管理”应用程序是 Vaadin 应用程序,那么我不鼓励您在 Vaadin应用程序中进行凭据检查. 这是因为当您进入 Vaadin 应用程序时,会创建一个新的应用程序实例。这意味着您的 UI 将被初始化以及您在 UI 的 init 方法中执行的任何其他操作。您可能想要做的是阻止用户进入 Vaadin 应用程序,除非她已登录 - 这意味着您需要在其他地方进行凭据检查 - 例如,有一个单独的 servlet,其唯一职责是登录用户。如果允许登录,则授予对 Vaadin 应用程序的访问权限,如果访问被拒绝,则将用户转发到 PHP 登录屏幕。下一个问题是,您如何阻止用户在登录之前访问 Vaadin 应用程序?通常,这是使用 servlet 过滤器完成的。

我强烈建议您使用 3rd 方框架进行身份验证和授权。看看http://shiro.apache.org/,它很容易安装,并且似乎与 Vaadin 一起工作得很好。您需要做的就是配置它并实现一个登录屏幕,框架将负责其余的工作。

于 2013-09-19T19:42:33.473 回答
2

如果我理解您的问题,您希望能够为登录到 PHP 应用程序的某些特定用户提供“自动登录链接”。这个链接应该自动让用户登录到java应用程序,对吧?

在不知道有关此案例的任何详细信息的情况下,例如两个应用程序是否在同一域上运行,或者它们是否使用相同的数据库(两个应用程序中的用户凭据相同)等,我将提出以下解决方案:

在 java 应用程序上创建一个操作(链接),它接收创建会话所需的必要参数(如 GET)(可能 userId 就足够了)、时间戳和所有参数的签名。例如:

http://javaapp.example.com/autologin?userId=123&timeStamp=123456789&sign=hj23kh4j234jk324h

其中签名是使用一些强大的加密算法计算的。然后在接收端(java 应用程序)验证签名是否正确。如果正确,则创建会话。签名计算可能类似于:

$signature = sha1($userId . $timeStamp . '一些盐' . $sharedSecretBetweenBothApps);

使用时间戳,您可以检查是否未使用旧链接。例如,不允许超过 15 分钟的旧链接并将使用过的链接存储在 Java 应用程序中,以确保它们永远不会被重复使用。您不必保留过期时间之前的链接历史记录。

正如评论中所讨论的,另一个想法是在 java 端创建一个 API,它能够提供一次性链接。

sha1算法可能不够强大,但展示了思路,实现起来也很简单。

这回答了你的问题了吗?

于 2013-09-19T19:38:03.070 回答