2012-01-22 53 views
8

我有這樣在我的控制器的方法:Spring 3.x - 如何從一個返回數據的映射中重定向?

@RequestMapping(value="getData", method=RequestMethod.GET) 
@ResponseBody 
public List<MyDataObj> getData() 
{ 
    return myService.getData(); 
} 

的數據被返回爲JSON或XSL,這取決於該請求。

如果提出請求的人並未被授權訪問我需要將用戶重定向到一個「未授權」頁中的數據,所以這樣的事情:

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

所有的例子我見過使用Spring需要該方法返回StringModelAndView。我想過使用HttpServletResponse.sendRedirect(),但我所有的JSP都在WEB-INF下,無法直接聯繫到。

如何正常拒絕訪問數據請求URL?

回答

5

更優雅的解決方案可能是to use a HandlerInterceptor,它將檢查授權,阻止任何不允許繼續進行的請求。如果請求到達您的控制器,您可以認爲它沒問題。

+0

這沒有奏效,因爲我用'@ ResponseBody'註解了我的方法。我用JSON中的'RedirectView'對象獲得了所有內容。我現在正在查看'HandlerInterceptor'。 – Paul

+0

@保羅:好點。我編輯了我的答案以刪除那一點。 – skaffman

+1

我不得不重新修改我的目錄結構(我有'/'下的所有東西),但使用攔截器效果很好,謝謝。 – Paul

1

另一種方法是過濾器。您可以將所有安全邏輯移入過濾器,並在控制器中保持乾淨的代碼。

0

很簡單:

發送錯誤狀態給客戶

response.setStatus(HttpServletResponse.SC_NO_CONTENT); 

和你Ajax回調處理程序和重定向處理相同。 :)

+0

我在這裏沒有使用Ajax。 – Paul

+0

如果沒有Ajax,那麼作爲電子鋅和skaffman建議你應該去處理,檢查授權並使用重定向視圖。 – Abhi

4

答案在下面。但是你的特殊情況寧願用其他方法來處理。

@RequestMapping(value = "/someUrl", method = RequestMethod.GET) 
@ResponseBody 
public Response someMethod(String someData, HttpServletResponse response){ 
    if(someData=="redirectMe"){ 
     response.sendRedirect(ppPageUrl); 
    } 
... 
} 
相關問題