Oh I forgot. So yes you are on your own excepted if you use an EJB ;). Then you have 2 solutions for the impl: - cdi interceptor with SecurityContext injected - JAXRS filter with priority AUTHORIZATION
Second one will be called before first one but not sure it is a big deal Romain Manni-Bucau @rmannibucau http://www.tomitribe.com http://rmannibucau.wordpress.com https://github.com/rmannibucau 2014-11-12 10:19 GMT+01:00 Alex Soto <[email protected]>: > I cannot relay on cxf :( > > 2014-11-12 10:15 GMT+01:00 Romain Manni-Bucau <[email protected]>: > >> Don't loose too much time on it ;) >> org.apache.cxf.interceptor.security.SecureAnnotationsInterceptor >> >> >> Romain Manni-Bucau >> @rmannibucau >> http://www.tomitribe.com >> http://rmannibucau.wordpress.com >> https://github.com/rmannibucau >> >> >> 2014-11-12 10:11 GMT+01:00 Alex Soto <[email protected]>: >> > :( I thought that this standard annotation could be used in standalone >> > JAXRS endpoint. Well then I will need to do some kind of interceptor. >> > >> > 2014-11-12 10:06 GMT+01:00 Romain Manni-Bucau <[email protected]>: >> > >> >> Well, in your sample @RolesAllowed is ignored since that's not an EJB. >> >> >> >> >> >> Romain Manni-Bucau >> >> @rmannibucau >> >> http://www.tomitribe.com >> >> http://rmannibucau.wordpress.com >> >> https://github.com/rmannibucau >> >> >> >> >> >> 2014-11-12 9:57 GMT+01:00 Alex Soto <[email protected]>: >> >> > Hi, >> >> > >> >> > Yes that example works but if I do something like >> >> > >> >> > @Path("sc") >> >> > public static class Res { >> >> > @Context >> >> > private SecurityContext sc; >> >> > >> >> > @GET >> >> > @RolesAllowed("therole") >> >> > public boolean f() { >> >> > return sc.isUserInRole("therole"); >> >> > } >> >> > } >> >> > >> >> > Note that in theory when the role is another the f() method should >> not be >> >> > executed, but the reality is that is executed as well. So it seems >> that >> >> > with a custom security context you cannot relay on declarative mode >> using >> >> > annotations. >> >> > >> >> > 2014-11-11 16:48 GMT+01:00 Romain Manni-Bucau <[email protected] >> >: >> >> > >> >> >> Hi >> >> >> >> >> >> what's the difference with >> >> >> >> >> >> >> >> >> https://git-wip-us.apache.org/repos/asf?p=tomee.git;a=blob;f=server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CustomSecurityContextTest.java;h=6129a063007f2f703037fd048f28272ad81c79d6;hb=c5dea27ad20000b83391fc4bdc1b092b358f8c0c >> >> >> ? >> >> >> >> >> >> >> >> >> Romain Manni-Bucau >> >> >> @rmannibucau >> >> >> http://www.tomitribe.com >> >> >> http://rmannibucau.wordpress.com >> >> >> https://github.com/rmannibucau >> >> >> >> >> >> >> >> >> 2014-11-11 15:56 GMT+01:00 Alex Soto <[email protected]>: >> >> >> > Hi, >> >> >> > >> >> >> > I am developing an application with JAXRS 2.0, and for this reason >> >> >> > currently I am using TomEE2. I need to implement my own >> >> SecurityContext >> >> >> > based on JWT. I need to implement on my own because currently I >> cannot >> >> >> rely >> >> >> > on any CXF class because I don't know the final application server >> >> yet. >> >> >> But >> >> >> > anyway, the problem is that I don't know but it just don't works. >> Let >> >> me >> >> >> > post a simple example. >> >> >> > >> >> >> > @Provider >> >> >> > public class JWTRequestFilter implements ContainerRequestFilter { >> >> >> > >> >> >> > @Override >> >> >> > public void filter(ContainerRequestContext request) throws >> >> IOException { >> >> >> > String token = request.getHeaderString("x-access-token"); >> >> >> > try { >> >> >> > String username = getUsernameFromToken(token); >> >> >> > final User user = getUserByName(username); >> >> >> > request.setSecurityContext(new SecurityContext() { >> >> >> > @Override >> >> >> > public boolean isUserInRole(String role) { >> >> >> > return user.isUserInRole(role); >> >> >> > } >> >> >> > @Override >> >> >> > public boolean isSecure() { >> >> >> > return false; >> >> >> > } >> >> >> > @Override >> >> >> > public Principal getUserPrincipal() { >> >> >> > return user; >> >> >> > } >> >> >> > @Override >> >> >> > public String getAuthenticationScheme() { >> >> >> > return SecurityContext.BASIC_AUTH; >> >> >> > } >> >> >> > }); >> >> >> > } catch (ParseException | JOSEException e) { >> >> >> > e.printStackTrace(); >> >> >> > } >> >> >> > } >> >> >> > } >> >> >> > >> >> >> > And the endpoint: >> >> >> > >> >> >> > @Path("/book") >> >> >> > @PermitAll >> >> >> > public class BookResource { >> >> >> > >> >> >> > @GET >> >> >> > @Produces(MediaType.TEXT_PLAIN) >> >> >> > @RolesAllowed("admin") >> >> >> > public String book() { >> >> >> > return "book"; >> >> >> > } >> >> >> > @GET >> >> >> > @Path("article") >> >> >> > @Produces(MediaType.TEXT_PLAIN) >> >> >> > @RolesAllowed("superadmin") >> >> >> > public String article() { >> >> >> > return "article"; >> >> >> > } >> >> >> > } >> >> >> > >> >> >> > I have added two debug breakpoints, the firstone just before >> >> registering >> >> >> > the new SecurityContext, and the second one inside SecurityContext >> in >> >> >> > method isUserInRole. >> >> >> > >> >> >> > The problem is that the first breakpoint is executed but not the >> >> second >> >> >> > one, so the SecurityContext I have implemented is not called and of >> >> >> course >> >> >> > the endpoints are accessible for any user. >> >> >> > >> >> >> > What am I missing? >> >> >> > >> >> >> > -- >> >> >> > +----------------------------------------------------------+ >> >> >> > Alex Soto Bueno >> >> >> > www.lordofthejars.com >> >> >> > +----------------------------------------------------------+ >> >> >> >> >> > >> >> > >> >> > >> >> > -- >> >> > +----------------------------------------------------------+ >> >> > Alex Soto Bueno - Computer Engineer >> >> > www.lordofthejars.com >> >> > +----------------------------------------------------------+ >> >> >> > >> > >> > >> > -- >> > +----------------------------------------------------------+ >> > Alex Soto Bueno - Computer Engineer >> > www.lordofthejars.com >> > +----------------------------------------------------------+ >> > > > > -- > +----------------------------------------------------------+ > Alex Soto Bueno - Computer Engineer > www.lordofthejars.com > +----------------------------------------------------------+
