4

我有一个弹簧控制器方法。它旨在以编程方式注册用户(通过产品内另一个系统的单一登录过程)。它的工作原理是获取用户数据,对其进行验证,如果用户帐户不存在则创建一个用户帐户,将共享令牌传回另一个系统,然后对用户进行身份验证。有一个握手过程正在进行,但要找到问题的根源。如果用户在系统中不存在,我希望相同的方法返回一个字符串,ModelAndView如果他们已经注册,则返回一个。

可能的解决方案(但无法执行):

  • 返回的字符串(在第一次用户的情况下)将使用HttpURLConnection输入流读取。因此,如果有办法将数据放入 ModelAndView 对象中,然后使用输入流读取它,那么我就设置好了。
  • 我可以通过将返回类型设为 来返回字符串并使用输入流读取它@ResponseBody String,但是,当它是现有用户时,我无法返回视图。

理想情况下,我会返回一个模型和视图,但另一个系统不是弹簧,所以它不会理解它。

总而言之,一个做两件事的方法,如果用户是第一次使用,它会返回一个带有加密令牌的字符串到另一个系统,另一个系统将在 iframe 中使用它来验证用户。

在一种情况下需要返回一个字符串以使用另一个系统中的输入流阅读器来读取,而在现有用户的情况下,需要返回一个视图以使用 spring 本身来读取。

如果有任何不清楚的地方,请告诉我。

编辑:有没有办法返回足够通用的 http 响应(类似于 http servlet 响应),并且可以在 spring 内部和外部工作。这也将解决我的问题。

4

1 回答 1

4

一个方法只能有一个返回类型,因此您需要将请求转发到另一个控制器方法。哪种控制器方法可能取决于您的身份验证结果...

    @RequestMapping ...
    public String handleRequest() {
        if(valid){
           return "forward:/path_to_my_another_controller";
        }else {
           return "forward:/somewhere_else";
        }
    }
于 2012-11-27T15:49:15.913 回答