Frage

Ich bin Glassfish 4 und Jersey als JAX-RS-Implementierung. Ich habe mein EJB so gesichert:

@Stateless
@DeclareRoles({"Authentication_Reader"})
@RolesAllowed({"Authentication_Reader"})
public class AuthenticationServiceBean { 
   public void foo() {
      ... 
   }

}

Ich habe einen Sicherheitsrollen-Mapping-Eintrag in Glassfish-Web.xml erstellt und auch eine Sicherheitsrollenerklärung in web.xml erstellt.

Die folgenden Arbeiten von einem Servlet:

@WebServlet(name = "TestServlet", urlPatterns = {"/test.do"})
@RunAs("Authentication_Reader")
public class TestServlet extends HttpServlet {

    @Inject
    private AuthenticationServiceBean authenticationService;

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       authenticationService.foo();
        .. etc ...
    }
}

Aber wenn ich es aus einer JAX-RS-Ressource wie dieses mache:

@RequestScoped
@RunAs("Authentication_Reader")
@Path("test")
public class TestResource {
    @Inject
    private AuthenticationServiceBean authenticationServiceBean;

    @GET
    public String test() {
        int x = 123;  // This code executes fine
        authenticationServiceBean.foo();   // This gets an AccessLocalException
        return "I never returned this";
    }
}

Das Glassfish Server -Protokoll sagt im Grunde: javax.ejb.accessLocalException: Client nicht für diesen Aufruf autorisiert

Ich verstehe nicht, warum dies für ein Servlet und nicht für die Restressource funktioniert. Für mich scheint dies gut zu funktionieren.

War es hilfreich?

Lösung

Wenn Sie sich ändern TestResource EJB sein und wenn Sie injizieren AuthenticationServiceBean Verwendung @EJB es sollte funktionieren.

Sie können sich ansehen Jersey-ejb Beispiel. Und da gibt es auch Jersey-GF-EJB Integrationsmodul, das zur Verwendung von EJBs auf Glasfisch verwendet werden soll. Das ist Jersey Spezifisch unterstützt JAX-RS noch nicht, EJB in die Ressourcenklasse zu injizieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top