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