向netty telnet示例添加身份验证

向netty telnet示例添加身份验证,netty,Netty,我对Netty和Java完全陌生,但今天下午我已经基于Netty telnet示例创建了一个聊天服务器。它工作得很好,我使用了“/”斜杠命令,这样人们可以做一些事情,比如设置他们的名字,我现在将其存储在ctx->setAttachment(name)中 我有一个后端数据库服务器,我想与他们连接,这样我就可以通过这种方式获得他们的名字,但我需要先为每个用户添加身份验证。我知道我可以用更多的斜杠命令来完成。但我想看看是否可以使用事件链中的处理程序来完成。让处理程序检查用户是否经过身份验证,如果没有,

我对Netty和Java完全陌生,但今天下午我已经基于Netty telnet示例创建了一个聊天服务器。它工作得很好,我使用了“/”斜杠命令,这样人们可以做一些事情,比如设置他们的名字,我现在将其存储在ctx->setAttachment(name)中

我有一个后端数据库服务器,我想与他们连接,这样我就可以通过这种方式获得他们的名字,但我需要先为每个用户添加身份验证。我知道我可以用更多的斜杠命令来完成。但我想看看是否可以使用事件链中的处理程序来完成。让处理程序检查用户是否经过身份验证,如果没有,则执行身份验证逻辑。然后以某种方式存储它们,并对其进行身份验证。如果它们经过身份验证,它将让我当前的聊天处理程序执行它的工作


任何人都可以提供一些链接或提示这样做吗?我现在对内蒂的了解非常基础。提前谢谢。

这要看情况而定。。例如,您可以有一个自定义的SimpleChannelUpstreamHandler来处理身份验证,并在验证完成后将其删除

大概是这样的:

public class AuthHandler extends SimpleChannelUpstreamHandler {

    @Override
    public void messageReceived( ChannelHandlerContext ctx, MessageEvent e) throws Exception {
        if (auth(e)) {
            // remove handler after auth was done
            ctx.getPipeline().remove(this);
        }
    }

    // Returns true if auth was successfully
    private boolean auth(MessageEvent e) {
        ....
    }
}

这要看情况了。。例如,您可以有一个自定义的SimpleChannelUpstreamHandler来处理身份验证,并在验证完成后将其删除

大概是这样的:

public class AuthHandler extends SimpleChannelUpstreamHandler {

    @Override
    public void messageReceived( ChannelHandlerContext ctx, MessageEvent e) throws Exception {
        if (auth(e)) {
            // remove handler after auth was done
            ctx.getPipeline().remove(this);
        }
    }

    // Returns true if auth was successfully
    private boolean auth(MessageEvent e) {
        ....
    }
}

他很有魅力。我曾尝试使用扩展SimpleChannelHandler的处理程序,但它停止了对主处理程序的连接调用。所以它阻止了我创建用户会话。我已经开始编写代码来解决这个问题,但这要简单得多。非常感谢!他很有魅力。我曾尝试使用扩展SimpleChannelHandler的处理程序,但它停止了对主处理程序的连接调用。所以它阻止了我创建用户会话。我已经开始编写代码来解决这个问题,但这要简单得多。非常感谢!