在 Hasor 中,一共有三种不同的方式实现请求拦截。

  • 通过 InvokerFilter 接口拦截请求(推荐)

  • 通过 javax.servlet.Filter 接口拦截请求

  • 通过 Aop 实现请求拦截器

其中 InvokerFilter 接口和 Filter 接口的工作方式和原理是等价的,只是用了不同的接口。

InvokerFilter形式

  1. public class MyInvokerFilter implements InvokerFilter {
  2. public void doInvoke(Invoker invoker, InvokerChain chain) throws Throwable {
  3. try {
  4. // before
  5. chain.doNext(invoker);
  6. // after
  7. } catch (Throwable e) {
  8. // error
  9. throw e;
  10. }
  11. }
  12. }

Filter形式

传统的 J2EE的 Filter 充当拦截器。例如:

  1. public class MyFilter implements Filter {
  2. ...
  3. }

配置拦截器

最后对拦截器进行声明注册就可以正常使用了。

  1. public class StartModule extends WebModule {
  2. public void loadModule(WebApiBinder apiBinder) throws Throwable {
  3. ...
  4. apiBinder.filter("/*").through(MyInvokerFilter.class); // InvokerFilter形式
  5. apiBinder.jeeFilter("/*").through(MyFilter.class); // Filter形式
  6. ...
  7. }
  8. }