1

我有两个应用程序。一种是基于 servlet 的遗留 web 应用程序。另一个是基于spring的webapp。旧版应用程序的页面包含多个 jquery 选项卡。我希望其中一个选项卡充当基于 spring 的应用程序的 iframe。为了实现这一目标,我做了以下事情:

  1. 单击选项卡名称后,向 spring 应用程序触发一个 http post 请求(通过打开和 http url 连接并将打印写入写入器)
  2. 该请求包含有关遗留系统中用户的信息,使用在两个系统上共享的生成密钥进行加密
  3. 配置spring mvc框架拦截对url的调用,调用一个方法处理请求。

理想情况下,请求处理应该执行以下操作:

  1. 使用共享密钥解密请求数据
  2. 验证请求、许可证等
  3. 如果请求者被认为是真实的并且用户具有有效的许可证(使用 api 进行许可证验证),则为用户设置一个帐户并以编程方式对他们进行身份验证到 spring security
  4. 生成随机身份验证密钥(用于将来的通信而不是共享密钥)
  5. 将随机密钥发送回遗留系统(使用共享密钥加密)
  6. 将用户定向到 spring 应用程序中的特定页面

1,2并且3是完整的,但我正在努力解决4and 5。如何将第二个密钥发送到旧系统并让旧系统使用 a 读取它,buffered reader然后在选项卡中打开重定向页面?甚至可能在一个响应中?

我使用@ResponseBody返回密钥,但不知道如何发送重定向?ps如果有什么不清楚的可以随时问我

4

1 回答 1

1

解决如下:

  1. 旧应用程序上的选项卡页预加载了 iframe 但没有源,同时放置了一个带有隐藏字段但没有值的表单,该表单将 iframe 作为其目标,其操作指向 spring app url
  2. 打开标签页时,将对遗留应用程序上的 servlet 执行 ajax 调用
  3. servlet 使用参数调用 /spring-url.do 上的 spring 应用程序。调用是通过打开一个 `HttpURLConnection` 来执行的。
  4. `/spring-url.do` 被 spring dispatcher 拦截,一个方法处理它如下:
  5. 如果这是用户的第一次,则为他们生成一个新密钥并将其写入响应(它通过将请求转发到另一个返回类型为`@ResponseBody String`的控制器来实现)
  6. 响应由旧应用程序 servlet 读取,密钥保存在旧应用程序数据库中以供将来通信
  7. servlet 使用新密钥加密用户数据并将其返回给 ajax 调用
  8. ajax 成功函数读取响应并设置隐藏表单字段的值并以编程方式提交表单
  9. spring 再次拦截 url,但这次是现有用户,因此它不会生成新密钥,而是验证数据并将请求转发到 spring 应用程序上的页面。

于 2012-11-27T21:50:54.877 回答