RollesAllowed und Stateless kombinieren

unknown

Bekanntes Mitglied
Hallo

Ich möchte gerne in meiner Rest-Schnittstelle (Basic Auth) die zwei Annotationen @Stateless und @RolesAllowed gleichzeitig verwenden. Mein Code sieht wie folgt aus:
Java:
@Stateless
@ManagedBean
@Path("/hello")
publicclassHelloWorldResource{
    @EJB
    HelloBean hellobean;

    @RolesAllowed("Admin")
    @GET
    @Path("/{param}")
    publicResponse getMsg(@PathParam("param")String msg,@QueryParam(value ="test")String test,@ContextSecurityContext sc)throwsIOException{


        hellobean.addBean();


        String output ="Jersey say : "+ msg +" "+ test +"is User in Role: "+sc.isUserInRole("Admin");

        returnResponse.status(200).entity(output).build();

        }
}
Und erhalte die folgende Exception:
Code:
javax.ejb.EJBAccessException:[EJB:010160]Security violation:User<anonymous> has insufficient permission to access EJB type=<ejb>, application=Shopping-1, module=Shopping-1.war, ejb=HelloWorldResource, method=getMsg, methodInterface=Local, signature={java.lang.String,java.lang.String,javax.ws.rs.core.SecurityContext}.
at weblogic.ejb.container.internal.InvocationWrapper.checkMethodPermissionsBusiness(InvocationWrapper.java:415)
at weblogic.ejb.container.internal.BaseLocalObject.preInvoke(BaseLocalObject.java:110)
at weblogic.ejb.container.internal.BaseLocalObject.__WL_preInvoke(BaseLocalObject.java:69)
at weblogic.ejb.container.internal.SessionLocalMethodInvoker.invoke(SessionLocalMethodInvoker.java:22)
at ch.shopping.resource.HelloWorldResource_94mzfg_NoIntfViewImpl.getMsg(UnknownSource)
Truncated. see log file for complete stacktrace
Als App Server verwende ich Weblogic. Dieses kann anscheinend mit der Annotation @RolesAllowed nicht richtig umgehen, wenn es sich um EJB handelt. Die Authentifizierung passiert dann offenbar auf App Server Ebene. Ich möchte jetzt auch keinen Pseudo User "anonymous" in Weblogic unter (my reals) anlegen. Denn so erlaube ich jedem Benutzer den Zugriff auf meine EJBs.

Ich habe sehr viel nachgesucht. Anscheinend bin ich nicht der einizige mit diesem Problem. Hab' bisher allerdings keine Lösung dafür gefunden ausser auf die Annotation
@Stateless zu verzichten (dann funktioniert es nämlich).

Kennt jemand eine bessere Lösung? Oder kann mir jemand zumindest erklären, was passiert wenn ich auf @Stateless verzichte?
 

unknown

Bekanntes Mitglied
Ich finde die Kombination
Code:
@Stateless
@ManagedBean
@Path
ein wenig merkwürdig ... aber das sollte hier nichts zur Sache tun.

Danke für die Antwort. Ich werde es mir anschauen.

Meinst du die gleichzeitige Verwendung von @Stateless und @ManagedBean? Falls ja: Bisher habe ich das Problem so gelöst, dass ich @Stateless einfach entfernet habe. Damit einige Sachen wie Injection immer noch funktionieren, habe ich @ManagedBean verwendet und in meinem Beispiel vergessen wieder wegzunehmen. Ansonsten wäre ich froh, wenn du mir kurz erklären würdest, was dran merkwürdig ist.
 

Steven Hachel

Bekanntes Mitglied
@ManagedBean wird für JSF genutzt, um im Frontend auf Methoden dieser Klasse zugreifen zu können. @ManagedBean ist aber seit Jahren deprecated und es sollte hierfür @Named (CDI) verwendet werden.

Zudem ist @ManagedBean oder @Named hier sinnlos, da du ja bestimmt nicht vom Frontend darauf zugreifen möchtest, oder? Das tust du ja über Rest.

viele Grüße
Steven
 

Ähnliche Java Themen

Neue Themen


Oben