func (self *AccessHandler) Process(ctx *DefaultPipelineContext, event IEvent) error { // log.Debug("accessEvent|Process|%s|%t\n", self.GetName(), event) aevent, ok := self.cast(event) if !ok { return ERROR_INVALID_EVENT_TYPE } //做权限校验............. if false { log.Warn("accessEvent|Process|INVALID AUTH|%s|%s\n", aevent.groupId, aevent.secretKey) } // 权限验证通过 保存到clientmanager self.clientManager.Auth(client.NewGroupAuth(aevent.groupId, aevent.secretKey), aevent.remoteClient) // log.Info("accessEvent|Process|NEW CONNECTION|AUTH SUCC|%s|%s|%s\n", aevent.groupId, aevent.secretKey, aevent.remoteClient.RemoteAddr()) cmd := protocol.MarshalConnAuthAck(true, "授权成功") //响应包 packet := packet.NewRespPacket(aevent.opaque, protocol.CMD_CONN_AUTH, cmd) //向当前连接写入当前包 remoteEvent := NewRemotingEvent(packet, []string{aevent.remoteClient.RemoteAddr()}) //向后走网络传输 ctx.SendForward(remoteEvent) return nil }
func (self *ValidateHandler) Process(ctx *DefaultPipelineContext, event IEvent) error { aevent, ok := self.cast(event) if !ok { return ERROR_INVALID_EVENT_TYPE } remoteClient := aevent.getClient() //做权限校验............. isAuth := self.clientManager.Validate(remoteClient) // log.DebugLog("kite_handler", "ValidateHandler|CONNETION|%s|%s\n", remoteClient.RemoteAddr(), isAuth) if isAuth { ctx.SendForward(event) } else { log.Warn("ValidateHandler|UnAuth CONNETION|%s\n", remoteClient.RemoteAddr()) cmd := protocol.MarshalConnAuthAck(false, "未授权的访问,连接关闭!") //响应包 p := packet.NewPacket(protocol.CMD_CONN_AUTH, cmd) //直接写出去授权失败 remoteClient.Write(*p) //断开连接 remoteClient.Shutdown() } return nil }