在Spring MVC中处理会话的好方法

时间:2014-10-01 18:01:18

标签: java spring session model-view-controller

我想知道是否有更好的方法来处理处理会话,而不是通过我的每个控制器方法运行这组代码。

public ModelAndView addUser(@RequestParam("userid") String userId,
        @RequestParam("passwd") String passwd,
        @RequestParam("usrtype") String usrtype,
        HttpSession session,
        Model model ){
    ModelAndView mav = new ModelAndView();
    if ((String) session.getAttribute("userId") == null) {
        model.addAttribute("msg", "Session was terminated.");
        model.addAttribute("url", "/login");
        mav.setViewName("redirect");            
        return mav;
    }
...

如何将其变成可重复使用的代码?

1 个答案:

答案 0 :(得分:2)

有多种方法可以优化它:

  • 保护请求是Spring Security的目的。 Spring Security使用Servlet过滤器在请求到达控制器之前拦截(和拒绝)请求。因此,您不必在控制器操作中处理与安全相关的代码

  • 如果出于某种原因,您可以/不想使用Spring Security,那么您应该看一下Spring的MVC interceptions。在拦截器中,您可以放置​​需要在控制器操作之前和之后执行的代码。

  • 如果您始终需要设置相同的Model属性,则可以使用@ModelAttribute注释方法。然后,将为每个填充模型的请求调用此方法,请参阅ModelAttribute methods documentationControllerAdvice类似,如果除控制器之外的其他类应提供模型信息,则使用它。