gpt4 book ai didi

java - ReSTLet 多 Filter 实现

转载 作者:行者123 更新时间:2023-12-02 04:48:41 26 4
gpt4 key购买 nike

我有几个 Resource 类,其中一些类有自己的过滤器(LoginResourceForceLogoutResource),还有一些不要(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

我的问题是:

  1. InputRequestFilter 应该是 Filter 还是其他类型?
  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);

使用此功能时请小心,因为子路由器的路径变量仅在附加到子路由器的元素内可用。

希望对你有帮助蒂埃里

关于java - ReSTLet 多 Filter 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29454866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com