2012-11-14 126 views
0

我剛開始學習spring mvc 3.我發現一個小問題,我的控制器會處理一個post請求(註冊表單)。但如果在地址欄中輸入映射值(bla3/save.html),它將執行它不應該的方法。這就是爲什麼我需要一個解決方案,如果有人直接輸入地址,它應該重定向到其他頁面,而不是嘗試添加新用戶。spring mvc防止直接訪問方法

@RequestMapping(value = "/save", method = RequestMethod.POST) //save new user 
public ModelAndView saveUser(@ModelAttribute("user") User user, BindingResult result){ 
    userService.addUser(user); 
    return new ModelAndView("redirect:/users.html"); 
} 

回答

3

如果直接在地址欄中輸入URL,它將成爲一個GET請求,您可以處理其他行爲,例如GET被禁止用於這個URL,或者在POST方法被調用時提交用戶的空白表單。

@RequestMapping(value = "/save", method = RequestMethod.GET) 
public ModelAndView saveUser(@ModelAttribute("user") User user, BindingResult result){ 
    userService.addUser(user); 

} 
+0

好吧,所以基本上我所要做的就是創建另一個方法來處理GET請求。我會明天嘗試它,因爲該項目在我的辦公室電腦中。 –

+0

是的..只需要一個控制器方法來處理HTTP GET請求 – Jayendra

0

您可以讓該方法僅在具有像下面的代碼這樣的特定標頭時才被執行。

@RequestMapping(value = "/save", method = RequestMethod.POST, headers="X-Requested-With=XMLHttpRequest") 

在這種情況下,當它是一個jquery的AJAX請求僅被執行的方法(jQuery的自動添加報頭)

當然這只是種防錯

1

在您的控制器類中添加此方法。

@RequestMapping(value = "bla3/save", method = RequestMethod.GET) 
public ModelAndView saveUser(@ModelAttribute("user") User user, BindingResult result){ 
    userService.addUser(user); 
... 
return new ModelAndView("redirect:/users.html"); 
} 

如果鍵入地址欄中的映射值(bla3/save.html)。此方法將執行。