2012-08-30 44 views
4

是否可以使用forward:/語法將請求重定向到非@RequestMapping帶註釋的方法。將請求轉發到非@RequestMapping

我想實現的是一種將請求內部重定向到無法直接從瀏覽器訪問的路徑的方法。

例如,如果用戶請求/image.jpg,我希望將其重定向到一個控制器,該控制器將回答圖像,映射到/img/image.jpg。問題是無法通過瀏覽器直接訪問/img/image.jpg

可能嗎?我怎麼能達到這個必要性?

+0

這是Spring MVC的解析器的基本思想。 –

+0

謝謝。但我不想將它重定向到文件本身。我需要將請求重定向到具有業務邏輯並解析視圖的另一個控制器方法。我錯過了你的觀點嗎? –

回答

1

我想你需要創建請求映射路徑,如果你想使用forward:/來調用資源。但是,您可以通過以下方式實現此目的:

創建最終用戶直接瀏覽器調用無法訪問的請求映射路徑。在轉發路徑請求之前,請添加一些額外的請求參數,然後由請求映射器進行檢查。

例子:

@RequestMapping(value = "/direct/browser/call") 
public String connections(WebRequest request) throws SQLException { 
    //validate request 
    request.setAttribute("formButton", isPost, WebRequest.SCOPE_REQUEST); 
    return "redirect:/some/value"; 
} 

@RequestMapping(value = "/some/value") 
public String connections(WebRequest request) throws SQLException { 
    //validate request 
    if(request.getParameter("formButton")!=null) { return "/homepage"; } 
    // else : do processing 
} 

您還可以限制瀏覽器在您的請求映射HTTP GET電話。例如:

@RequestMapping(value = "/some/value", method = RequestMethod.POST) 

HTTP方法:HEAD,PUT,DELETE,TRACE和OPTIONS在你的情況下也很有用。

+0

謝謝。這實際上是一個安全層。但出於安全原因,我不想阻止直接訪問,但是出於架構原因。我仍在尋找一種方法來對非公共控制器進行內部重定向。 –