使用禁止错误中断HTTP会话

时间:2015-04-01 15:10:34

标签: netty

在我的netty服务器应用程序中,我收到一个HttpRequest,只有当具有特定内容的cookie存在且有效(一种身份验证)时才必须处理该HttpRequest。 在我的管道中,我有以下对象:

  1. HttpRequestDecoder
  2. MyCookieHandler
  3. MyRequestHandler
  4. 我想要的是,如果cookie不存在或无效,则不会进一步详细说明并返回FORBIDDEN错误。

    这就是我在'MyCookieHandler'中所做的:

    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
      ...
      if (!isValid(cookie)) {
        ctx.writeAndFlush(
          new DefaultFullHttpResponse(HTTP_1_1, FORBIDDEN))
          .addListener(ChannelFutureListener.CLOSE);
        return;
      }
    }
    

    但是,只要调用'writeAndFlush',客户端就会收到错误'来自服务器的空回复'。

    我的代码出了什么问题?

    谢谢, 的Massimiliano

1 个答案:

答案 0 :(得分:1)

我发现了什么是错误。为ChannelFuture返回的writeAndFlush添加未来的侦听器,我发现问题是管道中需要HttpResponseEncoder来编码ByteBuf的答案。< / p>

所以,为了解决这个问题,我用这种方式改变了管道:

  1. HttpRequestDecoder
  2. HttpResponseEncoder
  3. MyCookieHandler
  4. MyRequestHandler
  5. 现在可行。