java - 一个站点的 Java servlet 能否代替浏览器登录到另一个站点?

标签 java tomcat spring-mvc servlets

这是对我之前问题的跟进:How to modify existing Spring MVC app to bypass spring security?

情况是:同一公司的3个不同Tomcat服务器[不同版本]上运行着3个Java web应用,使用相同的用户ID和密码,公司想将3个登录合并为一个单点登录.

我想知道以下解决方案是否可行:我修改了第一个网络应用程序,以便当用户从登录表单中按下登录按钮时,我的 servlet 使用该 ID/密码并调用第二个和第三个网络应用程序表单的操作并向他们提供我从第一种形式获得的用户 ID/密码,因此所有 3 个网络应用程序都将各自有一个用户 session ,就好像用户实际登录到每个应用程序一样,我将把 url 添加到第二个和第三个应用程序进入第一个应用程序的网页,以便用户可以单击并访问它们,这是否可能,模拟从第一个应用程序中的 servlet 登录到其他应用程序?

最佳答案

是的,这是可能的。通常过程是

  1. 登录到 app1。现在您的 Servlet(或 Struts Forms 等)中有了用户名/密码

  2. 在此Servlet(或Struts Action 等)中,使用用户名/密码调用app2 提供的登录服务API。这可以是一个 HTML 表单,或者 Rest 服务,Web 服务,任何你需要的。这可以通过 HTTP POST(使用 Apache Commons HTTP 客户端)或一些 Rest 客户端、Web 服务客户端等来完成。如果 app2 成功验证了用户名/密码,它将返回一个 token (通常是一个长字符串,非常类似于 session ID)。

  3. 现在您有了 token 。在您对 app2 的所有请求中将 token 设置为参数。所以 app2 可以做验证工作。

这是一种满足您需要的简单方法。但是也有很多缺点(尤其是安全漏洞)。

为了稳健,我建议您使用 SSO(单点登录)库,我认为这是一个比您自己做更好的选择。

关于java - 一个站点的 Java servlet 能否代替浏览器登录到另一个站点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24878118/

相关文章:

java - 如何通过 Hibernate 在 mysql 中获取枚举类型的所有可能值

java - Couchbase RX 客户端 - 合并多个可观察量与平面图

url - Open ID 端点转发不起作用

java - 如何匹配具有包含 "/"的 @pathVariable 的 Spring @RequestMapping?

java - 为什么要恢复在线程池线程中运行的任务的中断标志

java - 如何释放JScrollpane使其不总是拖到底部?

linux - 如何在 java-ee web 应用程序中运行 bash 脚本?

java - “发布到本地主机上的 tomcat v7.0 服务器...”遇到错误

java - 将 @CrossOrigin 注释与 JAX-RS ( Jersey ) 一起使用

hibernate - OpenEntityManagerInViewFilter 问题