spring mvc阻止直接访问方法

时间:2012-11-14 02:55:49

标签: java spring spring-mvc data-access

我刚刚开始学习spring mvc 3.我发现了一个小问题,我的控制器会处理一个帖子请求(注册表单)。但是如果在地址栏中键入映射​​值(bla3 / save.html),它将执行它不应该的方法。这就是为什么我需要一个解决方案,如果有人直接输入地址,它应该重定向到其他页面而不是尝试添加新用户。

@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 个答案:

答案 0 :(得分:3)

如果您的地址栏中直接有URL,那么您可以使用GET请求来处理不同的行为,例如:此URL禁止GET,或者在提交POST方法时提交用户的空白表单。

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

}

答案 1 :(得分: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)。此方法将执行。

答案 2 :(得分:0)

只有当存在特定标题时才能执行该方法,如下面的代码。

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

在这种情况下,该方法仅在jquery ajax请求时执行(jQuery自动添加标题)

当然这只是Poka-yoke