攔截器(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");
        }
    }
#