我有登录应用程序我正在检查用户名是否可用,如果它不可用,那么它将重定向到login.jsp并在login.jsp中显示消息,否则移动到index.jsp.but如果我给错了用户名和密码然后每次它每次都将控制器附加到url,即两次验证检查,两次控制器将被添加,即 http://localhost/cms/controller/controller/secureuserlogin
我不想要,我也不想改变网址格式,即/controller/*。重定向到同一页面时如何重定向而不更改URL?这是我的代码:
答案 0 :(得分:1)
链接到您的示例代码的png并不是很好。 SO具有语法高亮功能,因此最好将代码粘贴到代码块中或使用像pastebin这样的东西。
无论如何,回答......
您可以使用RedirectView更多地控制重定向,但我认为您遇到的问题是因为您的控制器没有映射到重定向。
尝试:
// Returns login page
@RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView login() {
ModelAndView modelAndView = new ModelAndView("views/login");
return modelAndView;
}
// Handles login submittion
@RequestMapping(value = "/loginSubmit", method = RequestMethod.POST) {
public String loginSubmitController(@Valid UserModel user, BindingResult bindingResult) {
RedirectView view;
// In production you would want to actually present errors to user
if(!bindingResult.hasErrors() && validUserCredentials(user)) {
return "redirect:/index";
}
return "redirect:/login";
}
您的JSP应该POST
到/loginSubmit
。
如果您计划使用非常标准的SOAP类式的身份验证(因此在POST和重定向上具有页面重新加载的登录页面),那么使用现有框架可能更容易(如果您已经在使用Spring,那么就像Spring Security一样)
当然,考虑到这一点,如果您需要更多自定义内容,这些框架可能会成为障碍,您很容易陷入与框架作斗争的陷阱,而不是帮助您。
如果您热衷于使用Spring Security框架,请尝试this quickstart guide。当然还有许多其他类似的框架,有些可能更适合您的用途,或者更简单;)比其他框架更好。