2016-02-12 92 views
0

我对Spring MVC并不是很有经验,我有这样的感觉是微不足道的(好吧,在ASP.NET中它几乎是),但我找不到任何东西这个解决方案,所以我不得不问。春季控制器方法之前的会话检查

说我有不同的控制器,所有这些检查自己的东西,在每一个方法...

@Controller 
public class FirstController { 
    @RequestMapping("/foo") 
    public String foo(HttpSession s) { 
     if(!s.getAttribute("something").equals("some stuff")) 
      return "redirect:home"; 
     return "foo"; 
    } 
    @RequestMapping("/bar") 
    public String bar(HttpSession s) { 
     if(!s.getAttribute("something").equals("some stuff")) 
      return "redirect:home"; 
     return "bar"; 
    } 
} 

@Controller 
public class AnotherController { 
    @RequestMapping("/john") 
    public String john(HttpSession s) { 
     if(Integer.parseInt(s.getAttribute("somethingElse")) == 42) 
      return "redirect:home"; 
     return "john"; 
    } 
    @RequestMapping("/doe") 
    public String doe(HttpSession s) { 
     if(Integer.parseInt(s.getAttribute("somethingElse")) == 42) 
      return "redirect:home"; 
     return "doe"; 
    } 
} 

有没有办法实际调用之前让每一个控制器做“的事情”是什么控制器“应该做。因此,控制器可以简单地是这样的:

public String foo() { return "foo"; } 

,而我知道,在后台的实际方法触发关闭之前如果正在调用语句。

任何简短的示例或文档链接(或几乎任何适合此请求的内容)都非常值得欢迎!

回答

1

我建议看@ControllerAdvice的用法:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-controller-advice

你可以结合@ControllerAdvice拦截所有的控制方法的执行执行之前,用你自己的基本控制器类沿创建具有像public String evaluate()这样的常用方法,然后在每个子分类控制器中实现该方法,并在@ControllerAdvice中调用该方法。

+0

我会研究它,谢谢! – NemanjaT