类级请求映射@requestmapping在对该类的每个请求上执行一些代码

时间:2016-09-23 10:12:41

标签: spring-mvc session request-mapping

@Controller
@RequestMapping(value = {"user"})
public class UserController {

...

 @RequestMapping(value = {"dashboard"})
public String index(HttpServletRequest req, ModelMap map) {
        this.objSession = req.getSession(false);
        try {
            System.out.println(this.objSession.getAttribute("userid"));

我使用的是Spring 4.2。 假设我有这个类,我想检查具有userid = 1属性的会话对象。 我正在检查这个“/ user”请求下的每个方法。 我的疑问是,如果我能在执行任何方法的任何代码之前避免使用相同的编码。

是否有任何方法可以提高检查的代码恢复能力?

预先感谢您的时间。

1 个答案:

答案 0 :(得分:0)

您可以通过匹配请求路径来使用interceptors

<mvc:interceptors path-matcher="/someRequest/*">
    <bean class="className" autowire="constructor"/>
</mvc:interceptors> 

path-mathcer中,您可以指定一种类型的网址,以便它可以执行您需要的任何内容。

控制器:

@Controller
@RequestMapping(value = {"someRequest/user"})
public class UserController {

拦截器:在处理someRequest/user之前,您可以使用下面的拦截器,以3种方式使用 - &gt; afterCompletion ,preHandle,postHandle

在你的情况下,代码将用preHandle方法

编写
public class SomeRequestIntercept implements HandlerInterceptor  {

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object,
            Exception exception) throws Exception {

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView arg3)
            throws Exception {

    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
        System.out.println("before processing someRequest/**");
        return true;
    }

}