我有两个应用程序。一个是基于 servlet 的遗留 Web 应用程序。另一个是基于 spring 的 webapp。遗留应用程序有一个包含多个 jquery 选项卡的页面。我希望其中一个选项卡充当基于 spring 的应用程序的 iframe。为了实现这一点,我做了以下工作:
- 在点击选项卡名称时触发 spring 应用程序的 http 发布请求(通过打开和 http url 连接并写入打印到作者)
- 请求包含有关旧系统中用户的信息,使用在两个系统上共享的生成 key 加密
- 配置 spring mvc 框架以拦截对 url 的调用并调用方法来处理请求。
理想情况下,请求处理应该执行以下操作:
- 使用共享 key 解密请求数据
- 验证请求、许可等
- 如果请求者被认为是真实的并且用户拥有有效的许可证(使用 api 进行许可证验证)然后为用户设置一个帐户并以编程方式将他们验证到 spring security
- 生成随机身份验证 key (用于 future 通信而不是共享 key )
- 将随 secret 钥发送回遗留系统(使用共享 key 加密)
- 将用户定向到 spring 应用程序中的特定页面
1
、2
和 3
是完整的,但我正在努力处理 4
和 5
。如何将第二个 key 发送到遗留系统并让遗留系统使用 buffered reader
读取它,然后在选项卡中打开重定向页面?甚至有可能在一个响应中吗?
我使用了 @ResponseBody
来返回 key ,但不知道如何发送重定向?
附:有什么不明白的可以随时问我
最佳答案
解决方法如下:
- 遗留应用程序的标签页预加载了 iframe 但没有源代码,同时放置了一个带有隐藏字段但没有值的表单,该表单以 iframe 作为目标,其操作指向 spring 应用程序 url
- 当标签页打开时,对遗留应用程序上的 servlet 执行 ajax 调用
- servlet 使用参数调用 `/spring-url.do` 上的 spring 应用程序。该调用是通过打开 `HttpURLConnection` 来执行的。
- `/spring-url.do`被spring dispatcher拦截,一个方法处理如下:
- 如果这是用户的第一次,则为他们生成一个新 key 并将其写入响应(它通过将请求转发到另一个返回类型为“@ResponseBody String”的 Controller 来实现)
- 响应由遗留应用程序 servlet 读取, key 保存在遗留应用程序数据库中以供将来通信
- servlet 使用新 key 加密用户数据并将其返回给 ajax 调用
- ajax 成功函数读取响应并设置隐藏表单字段的值并以编程方式提交表单
- spring 再次拦截 url,但这次是现有用户,因此它不会生成新 key ,而是验证数据并将请求转发到 spring 应用程序上的页面。
关于java - Spring app 对非 spring webapp 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13495850/