2017-08-02 1 views
0

Ceci est mon filtre d'authentification:ContainerRequestContext abortWith() ne pas interrompre

@Secured 
@Provider 
@Priority(Priorities.AUTHENTICATION) 
public class SecuredFilter implements ContainerRequestFilter { 

    @Override 
    public void filter(ContainerRequestContext requestContext) { 

     String authorizationHeader = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION); 
     if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) { 
      requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build()); 
     } 

     String token = authorizationHeader.substring("Bearer".length()).trim(); 
     // [...] 
     } 
} 

Pourquoi est-il pas interrompu et renvoyer la réponse lorsque l'en-tête est manquante? En ce moment, je reçois un NPE évident à authorizationHeader.substring ...

Le documentation dit:

vide abortWith (réponse de réponse)

Abandonner la chaîne de filtre avec une réponse . Cette méthode interrompt le traitement de la chaîne de filtrage et renvoie la réponse fournie au client . La réponse fournie passe à via la chaîne de filtres de réponse applicables. Paramètres: réponse - réponse à renvoyer au client.

Qu'est-ce qui me manque?

Répondre

1

je manque le mot-clé « retour »:

if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) { 
    requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build()); 
    return; 
} 

J'ai trouvé la solution here - Je suppose que la phrase dans la documentation était trompeuse:

Cette méthode rompt le traitement de la chaîne de filtre et renvoie le fourni réponse au client

Je pensais que le «retour» a été inclus.