Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc Spring3MVC:将模型从控制器移动/共享到另一个控制器_Spring Mvc - Fatal编程技术网

Spring mvc Spring3MVC:将模型从控制器移动/共享到另一个控制器

Spring mvc Spring3MVC:将模型从控制器移动/共享到另一个控制器,spring-mvc,Spring Mvc,我正在用Spring3MVC和jQuery做一个小项目 我不知道该怎么问,所以我会尽力解释 我有这样一个场景: LoginPage(使用用户对象模型)--提交-->服务器将OK发送回LoginPage--> (LoginPage)使用window.location=“Page2”重定向到第2页 问题:第2页无法识别用户 如何让它工作?我试着阅读了关于@SessionAttributes的内容,但并不真正理解 @Controller public class LoginController { .

我正在用Spring3MVC和jQuery做一个小项目

我不知道该怎么问,所以我会尽力解释

我有这样一个场景:

LoginPage(使用用户对象模型)--提交-->服务器将OK发送回LoginPage--> (LoginPage)使用window.location=“Page2”重定向到第2页

问题:第2页无法识别用户

如何让它工作?我试着阅读了关于
@SessionAttributes
的内容,但并不真正理解

@Controller
public class LoginController {
...
...
    @RequestMapping(value = "/")
    public ModelAndView  loginPage(ModelMap model) {
        model.addAttribute("user", new User());
        logger.info("Loading Login Page");
        return new ModelAndView("login");   
    }


      @RequestMapping(value = "/loginSubmit.html" ,method=RequestMethod.GET)
      public String processSubmit( ModelMap model,  User user) throws InterruptedException{
      ...
      ...
      return "1" to login page
      ...
      ...
在这里,我希望从上一个控制器知道用户,但它正在创建一个新的控制器

@Controller
public class Controller2 {
    @RequestMapping(value = "/home")
    public String home(ModelMap model, User user) {
        ...
        ...
}
LoginPage.jsp

    $.get("loginSubmit.html", form1Var.serialize(), function(data){
      var isSucess = data.charAt(0) == "1" ? true : false;   
      if ( isSucess == true) {
          alert("ok...");
          window.location = "home";
      } 

EDIT将我的解决方案移动到Answers。

默认情况下,Spring MMVC中的服务器端是无状态的。要在请求之间保存状态,必须将要保存的数据放入会话中。然后,该数据可用于同一会话中的每个请求(即来自同一客户端)

在您找到的解决方案中,@SessionAttributes(“user”)注释告诉SpringMVC,您希望通过将用户对象保存在会话中,在请求之间持久化该用户对象。这就是Spring将您从实际维护状态的所有工作中抽象出来的方式。

我的解决方案:

@SessionAttributes("user")
在两个控制器上

作为方法中的参数-工作

我还补充道

@ExceptionHandler(HttpSessionRequiredException.class)
public String SessionException(HttpSessionRequiredException ex) {
    logger.info(ex.getMessage());
    return "redirect:LogIn";
}
要捕获异常,用户将转到LoginPage而不是异常错误页


正如Donal Boyle指出的,结论是:使用
@SessionAttributes
在控制器之间共享模型

在将“用户”填充到会话中时足够公平,但您不希望每个控制器都手动检查用户/登录以确保适当的安全性。。这种安全检查应该在一个过滤器中,或者某个地方的公共代码中
@ExceptionHandler(HttpSessionRequiredException.class)
public String SessionException(HttpSessionRequiredException ex) {
    logger.info(ex.getMessage());
    return "redirect:LogIn";
}