2012-01-22 11 views
8

私はこのように私のコントローラのメソッドを持っています。Spring 3.x - データを返すマッピングからどのようにリダイレクトするのですか?</p> <pre><code>@RequestMapping(value="getData", method=RequestMethod.GET) @ResponseBody public List<MyDataObj> getData() { return myService.getData(); } </code></pre> <p>データは要求に応じて、JSONまたはXSLとして返されます:

要求を行っている人は、私は、「権限がありません」ページにユーザーをリダイレクトするために必要なデータにアクセスすることを許可するので、このような何かされていない場合:

@RequestMapping(value="getData", method=RequestMethod.GET) 
@ResponseBody 
public List<MyDataObj> getData() 
{ 
    if (!isAuthorized()) 
    { 
    // redirect to notAuthorized.jsp 
    } 
    return myService.getData(); 
} 

私が見てきたすべての例Springを使用する場合は、StringまたはModelAndViewのいずれかを返すメソッドが必要です。私はHttpServletResponse.sendRedirect()を使用することを考えましたが、私のすべてのJSPはWEB-INFの下にあり、直接アクセスすることはできません。

データリクエストのURLを適切に拒否することはできますか?

答えて

5

より洗練された解決策は、許可をチェックして、進めることが許可されていない要求をブロックする、to use a HandlerInterceptorです。要求がコントローラに達すると、それは正常であるとみなすことができます。

+0

私のメソッドに '@ResponseBody'という注釈が付けられているため、これは機能しませんでした。私はJSONの 'RedirectView'オブジェクトを手に入れました。私は今、 'HandlerInterceptor'を見ています。 – Paul

+0

@Paul:良い点。私はそのビットを削除するために私の答えを編集しました。 – skaffman

+1

私はディレクトリ構造を少し修正しなければなりませんでした(私は '/'の下にすべてを持っていました)が、インターセプタを使って大変感謝しました。 – Paul

1

もう1つのアプローチはフィルタです。すべてのセキュリティロジックをフィルタに移し、コントローラにクリーンコードを保存することができます。

0

非常にシンプル:

は、クライアントに

response.setStatus(HttpServletResponse.SC_NO_CONTENT); 

をエラーステータスを送信し、コールバックハンドラをAjaxやリダイレクトあなたと同じように扱います。 :)

+0

ここではAjaxを使用していません。 – Paul

+0

Ajaxがない場合は、e-zincとskaffmanが事前ハンドルに行くべきだと示唆しています。承認を確認し、リダイレクトビューを使用してください。 – Abhi

4

答えは以下のとおりです。しかし、あなたの特別な場合は、むしろ他のアプローチで扱うことになります。

関連する問題

 関連する問題