如何在 Ratpack 处理程序中获取 Servlet 过滤器 (before/after) 行为?

How to get Servlet Filter (before/after) behavior in Ratpack Handler?

我有一个 Servlet 过滤器,它在过滤器链之前和之后执行操作,例如:

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain){
    // I do some stuff here...

    chain.doFilter(req, res);

    // ... and then I do some more stuff here.
}

我正在将其转换为 Ratpack 应用程序,并且已经弄清楚如何将处理程序用作过滤器(通常)

class MyHandler implements Handler {
    void handle(Context ctx){
        // so some stuff...

        context.next()
    }
}

但对 next() 的调用是非阻塞的,因此后续操作会立即执行,而不是在其他处理程序执行后执行。

我如何在 Ratpack 中的代码行为之前和之后得到这个?

根据您的 "after" 逻辑在做什么以及您是否已经在 "after" 逻辑之前呈现响应,您可以使用 context.onClose()

class MyHandler implements Handler {
    void handle(Context ctx){
        // so some stuff...

        context.onClose(requestOutcome -> {
            // do some more stuff...
        })

        context.next()
    }
}