W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在 Hasor 中,一共有三種不同的方式實現(xiàn)請求攔截。
其中 InvokerFilter 接口和 Filter 接口的工作方式和原理是等價的,只是用了不同的接口結(jié)構(gòu)。
第一種 Aop 方式,這種方式是利用了 Hasor 原本的 Aop 功能充當(dāng)攔截器。好處是用起來最簡單,例如下面這段例子:
@Aop(CountInterceptor.class)
@MappingTo("/helloAcrion.do")
public class HelloAcrion extends WebController {
public void execute(RenderInvoker invoker, @Params() ParamsFormBean formBean){
...
}
}
public class CountInterceptor implements MethodInterceptor {
public Object invoke(MethodInvocation invocation) throws Throwable {
try {
System.out.println("before... " + invocation.getMethod().getName());
Object returnData = invocation.proceed();
System.out.println("after...");
return returnData;
} catch (Exception e) {
System.out.println("throw...");
throw e;
}
}
}
第二種,用前一章節(jié)介紹的 InvokerFilter 接口。這種方式的最大優(yōu)點是您可以在攔截器中直接拿到 Invoker 接口對象,例如:
public class MyInvokerFilter implements InvokerFilter {
public void init(InvokerConfig config) throws Throwable {
...
}
public void doInvoke(Invoker invoker, InvokerChain chain) throws Throwable {
try {
// before
chain.doNext(invoker);
// after
} catch (Throwable e) {
// error
throw e;
}
}
public void destroy() {
...
}
}
第三種,用傳統(tǒng)的 J2EE的 Filter 充當(dāng)攔截器。例如:
public class MyFilter implements Filter {
...
}
第二種和第三種,方式都需要您對攔截器進(jìn)行聲明注冊:
public class StartModule extends WebModule {
public void loadModule(WebApiBinder apiBinder) throws Throwable {
...
apiBinder.filter("/*").through(MyInvokerFilter.class);
apiBinder.jeeFilter("/*").through(MyFilter.class);
...
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: