2009-05-27 4 views
1

J'essaye de créer un module pour une application flexible, et je veux envoyer des notifications aux clients. J'ai regardé le service de messagerie BlazeDS pour envoyer les notifications aux clients, mais je veux être en mesure d'envoyer certaines mises à jour à certains clients. Le cadre de notification Flex ne semble pas permettre cela - si nous avons un champ dans le message avec une valeur de l'ID de l'utilisateur par exemple, n'importe quel client pourrait théoriquement s'abonner à tous les messages pour un identifiant utilisateur donné, et il n'y a aucune vérification sur côté serveur pour vous assurer que le client qui s'est abonné est connecté en tant qu'ID utilisateur.Flex Messaging Security

Y a-t-il quelque chose qui me manque ici, ou est-ce que la meilleure façon de gérer cet écrit est mon propre mécanisme d'interrogation côté client?

Répondre

1

Il existe en effet une solution pour cela dans les API. La première étape consiste à écrire une classe qui étend la classe FlexClientOutboundQueueProcessor. Vous devez passer outre une méthode:

public void add(List outboundQueue, Message message); 

Fondamentalement, tout ce que vous devez faire est d'écrire une logique pour déterminer si vous devez faire l'appel suivant:

outboundQueue.add(message) 

Autrement dit, si vous n'ajoutez pas le message à la file d'attente, le message ne sera pas transmis au client. L'autre méthode importante dans cette classe est:

FlexClient getFlexClient() 

que vous pouvez utiliser pour obtenir le FlexSession associé et, finalement, les informations d'authentification qui existe vraisemblablement dans votre application.

Une fois cela fait, il vous suffit d'enregistrer le processeur avec les canaux appropriés. Ajoutez simplement cet élément dans l'élément de l'élément « canal-définition » « propriétés »:

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

Je crois que vous pouvez également spécifier un élément « Propriétés » imbriqué pour le processeur de file d'attente, mais je ne crois pas que ça nécessaire .

+0

Merci! Cependant, il y a une chose à noter ici: bien que ce soit exactement la classe que je cherchais, il y a eu quelques problèmes que j'ai rencontrés en développant une solution ici. La première était que getFlexClient(). GetFlexSession() avait toujours une valeur nulle getUserPrincipal() - essayant d'accéder à la même propriété alors que FlexContext.getFlexSession() renvoyait un principal utilisateur - mais pas dans la fonction add. La fonction add est appelée lorsque la valeur est ajoutée à la file d'attente sortante, à quel point FlexContext.getFlexSession() est null. Le seul endroit que je pourrais trouver pour remplacer correctement est flush(). –