2015-05-14 7 views
5

Ich beginne eine Anwendung, die eine REST-API verwendet, die Aufrufe einer EJB-Schicht auf JBoss Wildfly (RestEasy) aufruft.Benutzerprinzipal von REST auf EJB-Ebene propagieren

Die REST-Dienste befinden sich in einem Krieg, der die ejb-Schicht aufruft. Ich weiß, wie BASIC oder jede kundenspezifische Form authenthication mit einem Resteasy Interceptor auf REST zu erreichen, die Header usw. Grundsätzlich wie hier beschrieben überprüft: http://howtodoinjava.com/2013/06/26/jax-rs-resteasy-basic-authentication-and-authorization-tutorial/

Das Problem ist jetzt - das ist nur eine Prüfung an der Fassade REST ist. Innerhalb der EJB-Schicht kenne ich den Benutzer nicht, der sich gegenüber dem REST-Dienst authentifiziert hat.

diese löschen - wenn RMI und Remote-EJB Anrufe mit Authentifizierung verwenden, wird der Benutzername in Session Context gespeichert:

@Stateless 
public class LoginService { 
@Resource 
private SessionContext sessionContext; 

    public String getCurrentUser() { 
    Principal principal = sessionContext.getCallerPrincipal(); 
    return principal.getName(); //I need this to be the username from REST auth 
    //Currently it's anonymous 
    } 
} 

Gibt es eine Möglichkeit, den Benutzernamen in irgendeiner Standardmethode zu propagieren? Z.B. einen benutzerdefinierten Prinzipal zu SessionContext hinzufügen?

Antwort

1

Sie können die Methode doAs des Probanden verwenden. See the JavaDocs here.

Wenn Sie vom Krieg zum EJB telefonieren, tun Sie dies mit der DoAs-Methode des authentifizierten Subjekts. Auf diese Weise wird das Thema in den Kontext des ejb propagiert. (zB @RolesAllowed funktioniert gut) Sie können die Authentifizierung in der web.xml wie gewohnt konfigurieren, wenn Sie möchten.

Um das Thema in den Krieg zu bekommen, versuchen Sie diese Subject userSubject=(Subject)PolicyContext.getContext("javax.security.auth.Subject.container");

+0

Diese Arbeit ist nicht auf Wildlfly 9.0.2. Versuchte "Staatenlose Ruhe" und rief "Stateless Session Bean" an. Versuchte "Pojo Rest" und rief "Stateless Session Bean" an. Keine Weitergabe von Benutzerprinzipal. W/@SecurityContext eingerichtet, mit Reseasy spezifischen Sicherheitskonfigurationen (resteasy.role.based.security). –

Verwandte Themen