如何在 Restlet 中创建全局和 Pre/Post 匹配过滤器
How to create Global and Pre/Post matching filter in Restlet
我有两个要求
- 需要创建一个过滤器,该过滤器应在每个和之前应用
每个资源。
- 需要创建两个过滤器 Pre 和 Post 与 Jersey 相同。
在 Restlet 中为请求配置执行链非常灵活。
要为所有服务器资源创建全局过滤器,您只需在 Restlet 应用程序中的路由器前面添加过滤器即可:
public class MyApplication extends Application {
public Restlet createInboundRoot() {
Router router = new Router(getContext());
(...)
router.attach("/test", TestServerResource.class);
router.attach("/", RootServerResource.class);
return new MyFilter(getContext(), router);
}
}
这个过滤器的内容可能是这样的:
public class MyGlobalFilter extends Filter {
public MyGlobalFilter(Context context, Restlet next) {
super(context, next);
}
(...)
@Override
protected void afterHandle(Request request, Response response) {
(...)
}
@Override
protected int beforeHandle(Request request, Response response) {
(...)
}
}
关于Restlet中的pre和post过滤器,只需在过滤器class.[=17中分别实现beforeHandle
和afterHandle
方法即可=]
public class MyGlobalFilter extends Filter {
(...)
@Override
protected void afterHandle(Request request, Response response) {
(...)
}
@Override
protected int beforeHandle(Request request, Response response) {
(...)
}
}
要应用这样的过滤器,Restlet中没有对应的注解。您需要在应用程序 class 的 createInboundRoot
方法中定义执行链(路由)时添加它们。您会注意到子路由器可用于仅对一部分服务器资源应用过滤器。
public class MyApplication extends Application {
public Restlet createInboundRoot() {
Router rootRouter = new Router(getContext());
(...)
Router subRouter = new Router(getContext());
subRouter.attach("", TestsServerResource.class);
subRouter.attach("{id}", TestServerResource.class);
MyFilter myFilter = new MyFilter(getContext(), subRouter);
rootRouter.attach("/test", myFilter)
.setMatchingMode(Template.MODE_STARTS_WITH);
return rootRouter;
}
}
希望对你有帮助,
蒂埃里
我有两个要求
- 需要创建一个过滤器,该过滤器应在每个和之前应用 每个资源。
- 需要创建两个过滤器 Pre 和 Post 与 Jersey 相同。
在 Restlet 中为请求配置执行链非常灵活。
要为所有服务器资源创建全局过滤器,您只需在 Restlet 应用程序中的路由器前面添加过滤器即可:
public class MyApplication extends Application { public Restlet createInboundRoot() { Router router = new Router(getContext()); (...) router.attach("/test", TestServerResource.class); router.attach("/", RootServerResource.class); return new MyFilter(getContext(), router); } }
这个过滤器的内容可能是这样的:
public class MyGlobalFilter extends Filter { public MyGlobalFilter(Context context, Restlet next) { super(context, next); } (...) @Override protected void afterHandle(Request request, Response response) { (...) } @Override protected int beforeHandle(Request request, Response response) { (...) } }
关于Restlet中的pre和post过滤器,只需在过滤器class.[=17中分别实现
beforeHandle
和afterHandle
方法即可=]public class MyGlobalFilter extends Filter { (...) @Override protected void afterHandle(Request request, Response response) { (...) } @Override protected int beforeHandle(Request request, Response response) { (...) } }
要应用这样的过滤器,Restlet中没有对应的注解。您需要在应用程序 class 的
createInboundRoot
方法中定义执行链(路由)时添加它们。您会注意到子路由器可用于仅对一部分服务器资源应用过滤器。public class MyApplication extends Application { public Restlet createInboundRoot() { Router rootRouter = new Router(getContext()); (...) Router subRouter = new Router(getContext()); subRouter.attach("", TestsServerResource.class); subRouter.attach("{id}", TestServerResource.class); MyFilter myFilter = new MyFilter(getContext(), subRouter); rootRouter.attach("/test", myFilter) .setMatchingMode(Template.MODE_STARTS_WITH); return rootRouter; } }
希望对你有帮助, 蒂埃里