4

スプリングコントローラー方式があります。これは、プログラムでユーザーをサインアップすることを目的としています(製品内の別のシステムからのシングルサインオンプロセスを介して)。これは、ユーザーデータを取得して検証し、存在しない場合はユーザーアカウントを作成し、共有トークンを他のシステムに通信してから、ユーザーを認証することで機能します。ハンドシェイクプロセスが進行中ですが、問題の根底に到達するためです。ユーザーがシステムに存在しない場合は同じメソッドで文字列を返し、ModelAndView既に登録されている場合はaを返します。

考えられる解決策(ただし、実行することはできません):

  • 返された文字列(初めてのユーザーの場合)は、HttpURLConnection入力ストリームを使用して読み取られます。したがって、ModelAndViewオブジェクトにデータを配置し、入力ストリームを使用してデータを読み取る方法がある場合は、設定されています。
  • 文字列を返し、return typeをas@ResponseBody Stringにすることで、入力ストリームを使用して正常に読み取ることができますが、既存のユーザーの場合はビューを返すことができません。

理想的には、モデルとビューを返しますが、他のシステムは春ではないため、理解できません。

要約すると、2つのことを行う1つのメソッドは、ユーザーが初めてユーザーである場合、暗号化トークンを使用して別のシステムに文字列を返します。他のシステムは、iframeでユーザーを認証するために使用します。

別のシステムの入力ストリームリーダーを使用して読み取るには、ある場合には文字列を返す必要があり、既存のユーザーの場合は、スプリング自体を使用して読み取るためにビューを返す必要があります。

不明な点がありましたらお知らせください。

編集:十分に一般的で、Springの内外で機能するhttp応答(httpサーブレット応答のようなもの)を返す方法はありますか?これも私の問題を解決します。

4

1 に答える 1

4

メソッドは戻り値の型を 1 つしか持てないため、リクエストを別のコントローラー メソッドに転送する必要があります。認証の結果に応じて、どのコントローラーメソッドが変わるか...

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