拦截器(Intercept)


WebMVC模块基于YMPv2.0的新特性,原生支持AOP方法拦截,通过以下注解进行配置:

@Before:用于设置一个类或方法的前置拦截器,声明在类上的前置拦截器将被应用到该类所有方法上;

@After:用于设置一个类或方的后置拦截器,声明在类上的后置拦截器将被应用到该类所有方法上;

@Clean:用于清理类上全部或指定的拦截器,被清理的拦截器将不会被执行;

@ContextParam:用于设置上下文参数,主要用于向拦截器传递参数配置;

@Ignored:声明一个方法将忽略一切拦截器配置;

说明: 声明@Ignored注解的方法、非公有方法和Object类方法及Object类重载方法将不被拦截器处理。

示例代码:

    // 创建自定义拦截器
    public class UserSessionChecker implements IInterceptor {
        public Object intercept(InterceptContext context) throws Exception {
            // 判断当前拦截器执行方向
            if (context.getDirection().equals(Direction.BEFORE)
                    && WebContext.getRequest().getSession(false) == null) {
                return View.redirectView("/user/login");
            }
            return null;
        }
    }

    @Controller
    @RequestMapping("/user")
    @Before(UserSessionChecker.class)
    public class Controller {

        @RequestMapping("/center")
        public IView userCenter() throws Exception {
            // ......
            return View.jspView("/user/center");
        }

        @RequestMapping("/login")
        @Clean
        public IView userLogin() throws Exception {
            return View.jspView("/user/login");
        }
    }