在restlet中为多个映射应用相同的过滤器

时间:2014-02-26 06:04:22

标签: java servlet-filters restlet

我有一个restlet,我在其中应用各种资源的映射,所有资源都应该通过一个公共过滤器,但是如果过滤条件匹配,即返回值为“CONTINUE”,则所有过滤器重定向到不同的资源。

public synchronized Restlet createInboundRoot()
{
   System.out.println("Called Application ");
   Router router = new Router();
   Filter fil1 = filterObj();
   router.attach("/helloworld",fil);
   fil.setNext(HelloWorldResource.class);
   router.attach("/hello",fil);
   fil.setNext(HelloWorldResource1.class);
   return router;
}

但这里发生的是,在执行结束时,过滤重定向到setNext()提到/使用的最后一个资源,在这种情况下为HelloWorldResource1,即使

http://localhost:8600/API/TRIAL/helloworld 

被调用,它将其重定向到HelloworldResource1.class

如果我为每个映射创建一个不同的过滤器对象并将其用于重定向,则会解决此问题,但我不确定它是否是最佳方法。有人可以指导我以最有效和最正确的方式来实现结果吗?

1 个答案:

答案 0 :(得分:2)

在Restlet中,路由是链式的。您需要使用过滤器构建一个链,然后路由器。像这样:filter-> router->(resource1 | resource2)

使用你的例子,它会像:

public synchronized Restlet createInboundRoot()
{
 Router router = new Router();
 router.attach("/helloworld",HelloWorldResource.class);
 router.attach("/hello",HelloWorldResource1.class);
 Filter fil1 = filterObj();
 fil1.setNext(router);
 return fil1;
}

请注意,Filter是一个Restlet(它扩展为Restlet)。见http://restlet.org/learn/javadocs/2.1/jse/api/org/restlet/routing/Filter.html