2009-05-07 15 views
2

Ich benutze Jbos AS 5 und das DatabaseServerLoginModule für die Autorisierung. Ich habe meine Anwendungsrichtlinie definiert (nur zum Beispiel, nicht der eigentlichen Code):Wie erhalten Sie die Benutzerrollen in Servlet?

<application-policy name = "jbossmq"> 
    <authentication> 
    <login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule" 
     flag = "required"> 
     <module-option name = "unauthenticatedIdentity">guest</module-option> 
     <module-option name = "dsJndiName">java:/MyDatabaseDS</module-option> 
     <module-option name = "principalsQuery">SELECT PASSWD FROM JMS_USERS WHERE USERID=?</module-option> 
     <module-option name = "rolesQuery">SELECT ROLEID, 'Roles' FROM JMS_ROLES WHERE USERID=?</module-option> 
    </login-module> 
    </authentication> 
</application-policy> 

Sobald der Benutzer erfolgreich autorisiert ist, wie kann ich die Benutzerrollen von meinem Servlet abrufen? Im obigen Code-Snippet werden die Rollen aus der Datenbank ausgewählt, aber wo werden sie gespeichert? In der Sitzung !? Wenn ja, unter welchen Sitzungsvariablen?

Ist es auch möglich, Ldap Authentication und Database Authorization in JBoss zu kombinieren?

Antwort

3

Clinton ist grundsätzlich richtig, die

boolean HttpServletRequest.isUserInRole(String role) 

Verfahren verwendet werden können, um zu überprüfen, ob ein Benutzer eine bestimmte Rollen zugewiesen hat. Jedoch, diese Methode soll nach den J2EE-Rollen suchen, die von der Anwendung definiert wurden (in der EAR-Beschreibung, der application.xml).

Während der Bereitstellung oder durch Verpacken eines AS-spezifischen Deskriptors in Ihrer EAR-Datei müssen Sie die Benutzerrollen des Anwendungsservers (die Sie in Ihrem Anmeldemodul als Prinzipale festlegen) der J2EE-App zuordnen. Rollen.

1

Ich bin mir bewusst, der Methode:

boolean HttpServletRequest.isUserInRole(String role) 

Ich weiß, dass nicht geben Sie eine Liste aller Rollen, aber wäre es Ihren Zweck dienen?

1

Ist der Behälter JACC kompatibel folgende Snippet funktionieren könnte (zumindest für mich auf Glassfish 3.1.x)

Subject subject = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container"); 
for (Principal principal : subject.getPrincipals()) { 
    LOG.debug("In subject: " + principal.getName()); 
} 

Der erste Treffer ist (in der Regel) Ihren Benutzerprinzipal und die anderen neigen Gruppe zu sein Schulleiter. Bitte nicht, dass, wenn Sie zufällig den Gruppenkriterien-Klassennamen kennen, Sie ihn filtern können, indem Sie stattdessen getPrincipals(Class<T> c) aufrufen.

Verwandte Themen