2015-05-14 10 views
5

Uruchamiam aplikację, która używa interfejsu API REST, który wykonuje wywołania do warstwy EJB na JBoss Wildfly (RestEasy).Propaguj główną nazwę użytkownika z REST do warstwy EJB

Usługi REST znajdują się w czasie wojny, która następnie wywołuje warstwę ESP. wiem jak osiągnąć podstawowy lub dowolną niestandardową formę authenthication na odpoczynek z RestEasy Interceptor, który sprawdza nagłówki itp zasadzie jak opisane tutaj: http://howtodoinjava.com/2013/06/26/jax-rs-resteasy-basic-authentication-and-authorization-tutorial/

Problem jest teraz - jest to po prostu sprawdzić na fasadzie REST. Wewnątrz warstwy EJB nie znam użytkownika, który uwierzytelnił się w usłudze REST.

Aby to wyjaśnić - przy użyciu RMI i zdalnych wywołań EJB z uwierzytelnianiem, nazwa użytkownika jest przechowywana w sesji Kontekst:

@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 
    } 
} 

Czy istnieje sposób, aby propagować nazwę użytkownika w jakiś sposób standardowy? Na przykład. umieszczenie niestandardowego zlecenia w SessionContext?

Odpowiedz

1

Możesz użyć metody Temat: doAs. See the JavaDocs here.

Podczas wykonywania wywołań z wojny do EJB należy wykonać to za pomocą metody doAs uwierzytelnionego podmiotu. W ten sposób temat jest propagowany do kontekstu ejb. (np. @RolesAllowed zadziała dobrze) Możesz skonfigurować uwierzytelnianie w web.xml jak zwykle, jeśli chcesz.

Aby uzyskać obiekt w wojnie, spróbuj tego Subject userSubject=(Subject)PolicyContext.getContext("javax.security.auth.Subject.container");

+0

To nie działa na Wildlfly 9.0.2. Próbowałem "Stateless Rest" nazywając "Bezpaństwowe Session Bean". Próbowałem "Pojo Rest" nazywając "Bezpaństwowe ziarno sesji". Brak propagacji głównej użytkownika. Konfiguracja W/@SecurityContext, w/Resteasy specyficzne konfiguracje zabezpieczeń (resteasy.role.based.security). –

Powiązane problemy