我想知道是否有更好的方法来处理处理会话,而不是通过我的每个控制器方法运行这组代码。
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;
}
...
如何将其变成可重复使用的代码?
答案 0 :(得分:2)
有多种方法可以优化它:
保护请求是Spring Security的目的。 Spring Security使用Servlet过滤器在请求到达控制器之前拦截(和拒绝)请求。因此,您不必在控制器操作中处理与安全相关的代码
如果出于某种原因,您可以/不想使用Spring Security,那么您应该看一下Spring的MVC interceptions。在拦截器中,您可以放置需要在控制器操作之前和之后执行的代码。
如果您始终需要设置相同的Model属性,则可以使用@ModelAttribute
注释方法。然后,将为每个填充模型的请求调用此方法,请参阅ModelAttribute methods documentation。 ControllerAdvice类似,如果除控制器之外的其他类应提供模型信息,则使用它。