如何获取Ratpack Handler中的Servlet过滤器(之前/之后)行为?

时间:2015-10-02 16:36:01

标签: groovy ratpack

我有一个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应用程序,并且已经找到了如何使用Handlers作为过滤器(通常)

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

        context.next()
    }
}

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

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

1 个答案:

答案 0 :(得分:4)

根据你的“后”逻辑的作用以及你是否已经在“后”逻辑之前呈现响应,你可以使用context.onClose()

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

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

        context.next()
    }
}