【问题标题】:Don't send exceptions to the client不要向客户端发送异常
【发布时间】:2013-06-18 22:22:17
【问题描述】:

似乎除了在我的 WAMP 服务器中抛出的任何内容都被 Autobahn 捕获并发送到客户端。这样做有两个问题:a) 如果服务器出现问题,则需要将其登录到服务器上,以便团队修复;b) 这些异常可能非常具有启发性(尤其是来自ORM)并且我不希望它们被转发给恶意的第三方。

我可以阻止这种行为吗?如果可以的话,有没有办法将应该发送给客户端的错误消息显式发送?

【问题讨论】:

    标签: python rpc autobahn


    【解决方案1】:

    更新答案

    AutobahnPython 默认不再发送回溯。

    当调用 Callee 的过程引发异常时,仅转发异常 - 而不是完整的回溯。要启用回溯转发,请在 Callee 的 ApplicationSession 上设置 traceback_app = True


    不推荐使用的答案:以下原始答案仅适用于 AutobahnPython 中的 WAMP v1 代码,该代码已被弃用并删除。

    带有 WAMP1 代码的 AutobahnPython 的最新版本是 0.8.15,您可以找到 herehere

    您可以覆盖派生自autobahn.wamp.WampProtocol 的类上的onAfterCallError 挂钩(请参阅here 或生成的文档)。

    在您的覆盖中,您可以执行自定义日志记录和/或修改错误对象,这是发送给调用者的 WAMP RPC 错误返回的基础。

    【讨论】:

    • 正是我想要的!对于那些好奇的人,这是我写的一篇关于我如何实现它的快速博客文章:blog.luhn.com/post/53384559656/…
    • 太棒了!顺便说一句:关闭 RPC 错误返回中的回溯发送也可以通过在协议实例 (github.com/tavendo/AutobahnPython/blob/master/autobahn/autobahn/…) 上设置 includeTraceback = False 来完成。我同意,它可能应该默认关闭。
    • 这些链接是 404ing。
    • @oberstet 我刚刚通过 Autobahn 源代码进行了一次 grep,但找不到 onAfterCallErrorincludeTraceback。这些方法有改变吗? edit 看起来它们已从存储库中删除,例如wamp1/protocol.py。我们能有一个更新的答案吗?
    • @GeraldKaszuba 我已经更新了答案。你可以在这里查看实现github.com/tavendo/AutobahnPython/blob/master/autobahn/autobahn/…
    【解决方案2】:
    try:
        main()
    except Exception, e:
        log(str(e))
    

    【讨论】:

    • 我必须在我定义的每一个 RPC 函数中都这样做。我是程序员;我很懒。有什么事情我可以做一次就忘记吗?
    • 我对高速公路不熟悉。其他服务器为所有请求提供了一次执行此操作的方法。然而,真正的问题是在代码中生成了异常而没有任何错误处理。对于任何可能导致异常的代码,确实应该有特定的“例外”块,并带有日志记录。如果您知道错误发生的位置,它将使调试变得容易得多。
    猜你喜欢
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 2022-07-08
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多