2016-06-07 7 views
0

Mit Dropwizard 0.9.1 Ich habe eine benutzerdefinierte AuthFilter erstellte Session-Cookie zu überprüfen, wie unter:Dropwizard Auth Filter @permitall Annotation funktioniert nicht auf Klassenstufe

Priority(Priorities.AUTHENTICATION) 
public class SessionAuthFilter extends AuthFilter<String /*session key*/, SessionUser /*principal*/> { 

    private SessionAuthFilter() { 

    } 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 
Cookie sessionKey = requestContext.getCookies().get("sessionKey"); 
if (sessionKey != null) { 
    try { 
    Optional<SessionUser> principal = new SessionAuthenticator().authenticate(sessionKey.getValue()); 
    requestContext.setSecurityContext(new SecurityContext() { 
     @Override 
     public Principal getUserPrincipal() { 
     return principal.get(); 
     } 

     @Override 
     public boolean isUserInRole(String role) { 
     return false; 
     } 

     @Override 
     public boolean isSecure() { 
     return requestContext.getSecurityContext().isSecure(); 
     } 

     @Override 
     public String getAuthenticationScheme() { 
     return SecurityContext.FORM_AUTH; 
     } 
    }); 
    return; 
    } catch (AuthenticationException e) { 
    throw new InternalServerErrorException(e.getMessage(), e); 
    } 
} 
throw new NotAuthorizedException("Please log in!", "realm="+realm); 
} 

Und es wie unten registriert:

environment.jersey().register(new AuthDynamicFeature(new SessionAuthFilter.Builder().setAuthenticator(new 
    SessionAuthenticator()).setRealm("Login").buildAuthFilter())); 
environment.jersey().register(RolesAllowedDynamicFeature.class); 

Das Problem ist, ich kann @ Annotation @Permitall auf Klassenebene in Ressourcenklassen nicht verwenden. Es funktioniert gut, wenn ich auf Methode, aber nicht auf Klasse filtern.

Ressourcenklasse:

@Path("/") 
@PermitAll //Doesn't work here 
@Produces(MediaType.APPLICATION_JSON) 
public class HomeResource { 

    @GET 
    @PermitAll //Works fine if here 
    @Path("/about") 
    public Response get() { 
    } 

}

Jede Idee, anyone?

Antwort

0

Authz-Annotationen auf Klassenebene werden in DW 9.x nicht unterstützt. Sie können im Quellcode von AuthDynamicFeature sehen, dass nur Annotationen auf Methodenebene überprüft werden, wobei letztendlich nur der Auth-Filter auf Methoden mit den Authz-Annotationen registriert wird.

Diese Einschränkung wurde in this pull request (to 1.0.0) behoben, wobei @RolesAllowed und @PermitAll auf Klassenebene unterstützt werden.

Verwandte Themen