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:
Und erhalte die folgende Exception:
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?
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();
}
}
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
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?