我有几个Resource
个类,其中一些有自己的过滤器(LoginResource
,ForceLogoutResource
),有些则没有(LogoutResource
)
LoginFilter loginProcess = new LoginFilter();
loginProcess.setNext(LoginResource.class);
LogoutFilter forceLogoutProcess = new LogoutFilter();
forceLogoutProcess.setNext(ForceLogoutResource.class);
Router router = (Router)super.createInboundRoot();
router.attach("/logout/{token}", LogoutResource.class);
router.attach("/logout", forceLogoutProcess);
router.attach("/login", loginProcess);
我想在此结构中添加另一个过滤器(InputRequestFilter
,它将验证所有请求的输入)。
路由最终应如下所示:
request -> InputRequestFilter -> LogoutResource
request -> InputRequestFilter -> loginProcess
request -> InputRequestFilter -> forceLogoutProcess
我的问题是:
InputRequestFilter
应该Filter
还是其他类型?感谢。
答案 0 :(得分:2)
如果您想在所有请求前添加过滤器,我们可以执行以下操作:
Router router = new Router(getContext());
InputRequestFilter inputRequestFilter = new InputRequestFilter(getContext());
inputRequestFilter.setNext(router);
return inputRequestFilter;
方法setNext
接受任何Restlet(路由器,过滤器,资源,直接扩展类Restlet,守护等的类)。
我不知道你想在新过滤器中实现什么,但它似乎是正确的方法。
我们还可以注意到,您还可以通过利用匹配模式进行更高级的路由配置,如下所述:
Router subRouter = new Router(getContext());
(...)
// something to attach (sub router, ...
router.attach("/path/{pathvariable}", subRouter)
.setMatchingMode(Template.MODE_STARTS_WITH);
使用此功能时,请注意,因为子路由器的路径变量仅在连接到子路由器的元素中可用。
希望它可以帮到你, 亨利