J'ai un soucis avec les @Observes dans une application J2EE. J'ai des beans en @SessionScoped qui observent un évènement.
1 2 3 4 5 6 7 8 9 10
| @SessionScoped
public class SomeProducer implements Serializable {
@PostConstruct
public void findData() {
//..
}
public void onDataChanged(@Observes DataChangedEvent event){
//...
}
} |
Ce bean est destiné aux utilisateur admins, seuls eux l'utilisent. Ce bean appelle d'autres EJB avec des @RolesAllowed qui requierent d'être admin. Par contre, les évènements peuvent être envoyés par des utilisateurs lambda durant la modification de leurs données persos. Je me retrouve avec la situation curieuse où ce bean admin est instancié quand un utilisateur lance un event. J'ai donc trois questions:
1)Y-a-t-il moyen de ne lancer l'event que vers les beans actuellement instanciés et non pas d'instancier tous les beans ayant un @Observes lors de l'event?
2)Si ce n'est pas possible, est-il possible de marquer quelque part qu'un rôle est requis sur une méthode @Observe pour qu'elle soit ignorée si on n'a pas le rôle?
3)Si je met un @RunAs sur le bean pour contourner le problème de droit, lors du @PostConstruct j'ai toujours le problème de permissions, comme si à ce moment là le @runas était ignoré. Le postconstruct est-il supposé respecter le @RunAs ?
edit: je viens d'avoir la réponse à la question 1) et implicitement la 2) via
@Observes(notifyObserver = Reception.IF_EXISTS)
La 3) reste d'actualité
Partager