Custom @RolesAllowed Rollen in Jersey WebService mit ContainerRequestFilter

Erstellte ich einen filter mit ContainerRequestFilter-Schnittstelle und versuchen, zuweisen von benutzerdefinierten Rollen Sie, dass die Rückgabe Entität "Benutzer".

 @Override
public ContainerRequest filter(ContainerRequest request) {
    User user = authenticate(request);
    if (user != null) {
        request.setSecurityContext(new Authorizer(user));
    } else {
        throw new WebApplicationException(400);
    }
    return request;

}

 private User authenticate(ContainerRequest request) {

    user = new User("erhan", "customRole");


    return user;
}

public class Authorizer implements SecurityContext {

    private User user;
    private Principal principal;

    public Authorizer(final User user) {
        this.user = user;
        this.principal = new Principal() {

            public String getName() {
                return user.username;
            }
        };
    }

    public Principal getUserPrincipal() {
        return this.principal;
    }

    public boolean isUserInRole(String role) {
        return (role.equals(user.role));
    }

    public boolean isSecure() {
        return "https".equals(uriInfo.getRequestUri().getScheme());
    }

    public String getAuthenticationScheme() {
        return SecurityContext.BASIC_AUTH;
    }
}

public class User {

    public String username;
    public String role;

    public User(String username, String role) {
        this.username = username;
        this.role = role;
    }
}

Alles in Ordnung ist mit dem filter, aber wenn es geht, um web-service -

 @GET
 @RolesAllowed({"customRole"})
 @Path("/test")
 public String getByType(@Context HttpHeaders headers,@Context SecurityContext sc,
                                 @Context HttpServletRequest request) {



   return null;
 }

erreicht die webservice-aber wenn ich Rolle,erreichte aber immer noch den gleichen webservice. Wie kann ich verschiedene benutzerdefinierte Rollen in Jersey ?

  • Ok, ich denke ich habe die Lösung gefunden, sollte aber anders fügen Sie einfach " <init-param> <param-name>com.Sonne.jersey.spi.container.ResourceFilters</param-name> <param-value>com.sun.jersey.api.container.filter.RolesAllowedResourceFilterFactory</param-value> </init-param> filter für mein web.xml problem gelöst. Aber Warum brauche ich, um zu initialisieren, ein weiteres filter-sonst ContainerRequestFilters ?
  • Da Jersey nicht support @RolesAllowed aus der box. Erwähnt filter fügt diese Unterstützung. Und BTW, sollten Sie nicht zurückkehren 400 für unbefugte, es heißt bad-request. Siehe HTTP-status 401.
Schreibe einen Kommentar