2009-03-24 7 views
1

Ich habe eine ziemlich gewöhnliche Java EE-Anwendung, die auf JBOSS läuft. Es verwendet die JBoss DatabaseLoginModule JAAS-Authentifizierung. Es hat auch Benutzer/Rollen der Anwendungsschicht in Hibernate, die genau gleich sind.Ändern von JAAS-Rollen basierend auf Softwarelizenz-Flags

Ich habe eine Idee (die ich denke, dass es ziemlich nützlich für mich ist), um ein Fähigkeitsbit zu haben, das ich im Softwarelizenzobjekt einstellen kann (nicht mit Hibernate), das alle Benutzer zum schreibgeschützten Benutzer macht. Dadurch kann ich eine read-only-Version des Produkts erstellen, indem ich es erneut lizenziere.

Was ich tun möchte, ist die Zuordnung der Benutzerzuordnungen basierend auf einem booleschen Flag innerhalb des Programms zugänglich.

Also normalerweise bekommen wir (viele-viele join)

Benutzer - * Userrole * -Role - * RoleActions

wo

user.roleid =>

role.id Wenn der Boolesche Wert ist gesetzt (ein in der Softwarelizenz gesetztes Funktions-Bit)

Ich möchte, dass JAAS so agiert wie alle Benutzer, die roleID = 1 sind, wenn die Lizenz dies sagt.

Irgendwelche Ideen?

Antwort

1

Durch Subclassing DatabaseServerLoginModule kann ich zusätzliche Prüfungen durchführen. (Auf der Software-Lizenz)

Trivial kann ich dann

  1. Wenn die Lizenz abgelaufen ist, geben ein Read-only Benutzer (die Anmeldeinformationen festgelegt sind)

  2. Wenn die Lizenz für die Read-Only hat Fähigkeit Bit gesetzt, gibt die Read-only Benutzer (die Anmeldeinformationen festgelegt sind)

Da die Anmeldung abgefangen wurde, wird die Hibernate Benutzersuche für das Recht sein, u ser.

0

Vielleicht vermisse ich hier das Boot, aber warum nicht das programmatisch?

In User Objekt, stellen Sie eine transiente Getter wie getAuthenticatedRoles(), die zusätzlich filtern würde was Hibernate geladen. Fügen Sie außerdem den ursprünglichen gemappten Sammlungsgetter protected hinzu, und verwenden Sie nur getAuthenticatedRoles() aus anderem Java-Code.

+0

, weil ich eine andere Rolle für den Benutzer ersetzen muss. Ich habe versucht, die getRole() wie Methoden zu filtern und der Benutzer (Prinzipal) hat bereits seine Rolle bis dahin. –