使用 Restlet 进行过滤的正确方法

The right way to do Filtering with Restlet

这是我需要修复的过滤器代码。过滤器背后的想法是,如果找到了一些查询字符串。处理它,不需要 return 或处理链或类似的东西。然而,当没有找到查询字符串时,应该为原始请求提供服务,例如get/put/update/delete请求。

    @Override
    protected int doHandle(Request request, Response response) {
        HttpServletRequest servletRequest = ServletUtils.getRequest(request);
        HttpServletResponse servletResponse = ServletUtils.getResponse(response);
        String query = servletRequest.getQueryString();
        LOG.info("Query=" + query);
        if(query != null && query.contains(ESCAPED_FRAGMENT_FORMAT1)){
            // TODO: return a HTML String, no need to go down the chain.
            return STOP;
        } else {
            // TODO: need to execute the original request
            return SKIP;
        }
        return CONTINUE;
    }

这里的问题是我不完全确定return 在此代码中的何处停止、跳过和继续以实现我的需要。

  • CONTINUE:表示请求处理应该正常继续。
  • STOP:表示请求处理应该停止,return 来自过滤器的当前响应。
  • SKIP:表示在beforeHandle(Request, Response)方法之后,请求处理应该跳过doHandle(Request, Response)方法继续afterHandle(Request, Response)方法。 doHandle 方法通过将调用分配给下一个 Restlet 来处理调用。

您可以在 javadocs 中找到所需的解释: http://restlet.com/technical-resources/restlet-framework/javadocs/2.3/jse/api/org/restlet/routing/Filter.html

希望对您有所帮助。