I have been pulling my hair out trying to find the proper solution to 
grabbing the UriInfo object when using Guice and Jersey and come to all of 
you for help.

I am trying to figure out the proper way of injecting @UriInfo into a 
non-resource class.

Let me explain:

I have implemented a custom RolesAllowedResourceFilterFactory:

public class RsResourceFilterFactory extends RolesAllowedResourceFilterFactory {

@Override
public List<ResourceFilter> create(AbstractMethod am) {
    List<ResourceFilter> rolesFilters = super.create(am);
    if (null == rolesFilters) {
        rolesFilters = new ArrayList<ResourceFilter>();
    }
    List<ResourceFilter> filters = new ArrayList<ResourceFilter>(rolesFilters); 
   
    RsSecurityContextFilter securityContextFilter = new 
RsSecurityContextFilter();

    // do some custom stuff to set on the SecurityContextFilter

    filters.add(0, securityContextFilter);
    return filters;
}
}

RsSecurityContextFilter simply creates a new SecurityContext and sets the 
requests security context:

public class RsSecurityContextFilter implements ResourceFilter, 
ContainerRequestFilter {

//  ...
    public ContainerRequest filter(ContainerRequest request) {
        request.setSecurityContext(new RsSecurityContext(groupConstraint, 
userConstraint));
        return request;
    }
// ...

};

In the SecurityContext I need to access the UriInfo.

I can't seem to find the magic combination of getting the proper values 
injected into RsSecurityContext (I have not included it here, as I have 
stripped all attempts out of the code).

In an effort to determine if it was a problem with my bindings I resorted 
to holding the injector in a static instance and grabbing it and then 
getting the WebApplication from the injector, and then attempting the 
following:

HtppContext httpContext = webApp.getThreadLocalHttpContext();
UriInfo uriInfo = httpContext.getUriInfo();

In this case getUrinfo() always fails as the thread local instance of the 
httpContext is always null.

Similarly, injecting the webapplication directly in to a jersey Resource 
(as provided directly by Guice) grabs the WebApplication, but it cannot be 
used to resolve HttpContext or UriInfo.

All other approaches to get the UriInfo (Including using assisted injection 
with the SecurityContextFilter and SecurityContext) either fail to retrieve 
the UriInfo via its provider, or fail as above when injecting 
WebApplication or HttpContext and attempting to get the UriInfo.

Any pointers to the proper approach would be GREATLY appreciated.

TIA

Martin

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to