【问题标题】:Flex Messaging SecurityFlex 消息安全
【发布时间】:2009-05-27 15:34:01
【问题描述】:

我正在尝试为 flex 应用程序创建一个模块,并且我想向客户端发送通知。我一直在寻找 BlazeDS 消息服务来向客户端推送通知,但我希望能够向某些客户端发送某些更新。 Flex 通知框架似乎不允许这样做 - 例如,如果我们在消息中有一个具有用户用户 ID 值的字段,那么理论上任何客户端都可以订阅任何给定用户 ID 的所有消息,并且没有验证服务器端以确保已订阅的客户端以该用户 ID 登录。

我在这里遗漏了什么,或者是在客户端编写我自己的轮询机制来处理这个问题的最佳方法吗?

【问题讨论】:

    标签: apache-flex messaging blazeds


    【解决方案1】:

    API 中确实有解决方案。第一步是编写一个扩展 FlexClientOutboundQueueProcessor 类的类。您需要覆盖一种方法:

    public void add(List outboundQueue, Message message);
    

    基本上,您需要做的就是编写一些逻辑来确定是否应该进行以下调用:

    outboundQueue.add(message)
    

    简单地说,如果你不把消息加入队列,那么消息就不会被推送到客户端。这个类中另一个重要的方法是:

    FlexClient getFlexClient()
    

    您可以使用它来获取关联的 FlexSession 以及最终可能存在于您的应用中的身份验证信息。

    完成后,您只需将处理器注册到适当的通道即可。只需在“channel-definition”元素的“properties”元素中添加这个元素:

    <flex-client-outbound-queue-processor class="com.foo.YourProcessor"/>
    

    我相信您也可以为队列处理器指定一个嵌套的“属性”元素,但我认为这不是必需的。

    【讨论】:

    • 谢谢!然而,这里有一点需要注意:虽然这正是我正在寻找的课程,但我在这里开发解决方案时遇到了一些问题。第一个是 getFlexClient().getFlexSession() 总是有一个 null getUserPrincipal() 值——试图通过 FlexContext.getFlexSession() 返回一个用户主体来访问相同的属性——但不是在 add 函数中。将值添加到出站队列时调用 add 函数,此时 FlexContext.getFlexSession() 为空。我能找到正确覆盖的唯一地方是flush()。
    【解决方案2】:

    只要你disable wildcard subscriptions,你就可以为此使用子主题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 2013-03-22
      • 2012-01-02
      • 2019-04-30
      相关资源
      最近更新 更多