echo 框架,在哪一刻降级权限?

问题描述

我使用 echo framework 创建我的 API 服务器。它由 systemd 启动,认需要 root,以获取 1024 以下的端口。为了安全起见,我喜欢在侦听端口被降级权限后我的 go 程序由 echo 框架获取

我知道如何降级,但我找不到合适的事件/回调?问题是,echo.Start()echo.StartAutoTLS() 不会回来。我可以创建一个并行线程并尝试找到我的回显会话的一些状态值,告诉我端口已打开,但我也找不到这样的状态指示。

如何确保在获取端口后执行一些代码(并确定知道)?

直到现在,我在服务器创建之前运行一个并行的 go 线程,然后等待 5 秒钟进行降级。到目前为止它有效,但这是hacky,我不喜欢它:-(

解决方法

您可以使用 e.ListenerAddr() 来检查端口是否打开。 它将返回 nil 直到端口打开。

func degradePrivileges(e *echo.Echo,userName string) { 
    for { adr := e.ListenerAddr() if adr != nil { 
        degradeMe(userName) break 
    } 
    time.Sleep(100 * time.Millisecond) } 
}