215 votes

Comment fonctionne la chaîne de filtres de sécurité Spring

Je me rends compte que le Printemps de sécurité de construire, sur la chaîne de filtres, qui va intercepter la demande, de détecter (l'absence de) l'authentification, la redirection d'authentification du point d'entrée ou de transmettre la demande d'autorisation de service, et éventuellement laisser la demande soit frappé le servlet ou de jeter l'exception de sécurité (non authentifié ou non autorisée). DelegatingFitlerProxy colles de ces filtres. Pour accomplir leurs tâches, ces filtrer l'accès à des services tels que UserDetailsService et AuthenticationManager.

Les filtres de la chaîne sont (dans l'ordre)

  • SecurityContextPersistenceFilter (restaure l'Authentification à partir de JSESSIONID)
  • UsernamePasswordAuthenticationFilter (effectue l'authentification)
  • ExceptionTranslationFilter (attraper les exceptions à la sécurité de FilterSecurityInterceptor)
  • FilterSecurityInterceptor (peut jeter l'authentification et l'autorisation des exceptions)

Je suis confus comment ces filtres sont utilisés. Est-ce que pour le printemps fourni form-login, UsernamePasswordAuthenticationFilter est utilisé seulement pour le /login, et ce dernier filtres ne sont pas? Le formulaire de login de l'espace de noms de l'élément d'auto-configuration de ces filtres? Est-ce que chaque demande (authentifié ou non) d'atteindre FilterSecurityInterceptor pour les non-url de connexion?

Que faire si je veux sécuriser mon API REST avec JWT-jeton, qui est extrait de la connexion? Je dois configurer deux noms de configuration http des tags, des droits de l'homme? Autre pour le /login avec UsernamePasswordAuthenticationFilter, et un autre pour le RESTE de l'url, avec des personnalisés JwtAuthenticationFilter.

Ne configurez deux http éléments de créer deux springSecurityFitlerChains? Est - UsernamePasswordAuthenticationFilter désactivé par défaut, jusqu'à ce que je déclare form-login? Comment puis-je la remplacer SecurityContextPersistenceFilter avec un, qui obtiendra Authentication existantes JWT-token plutôt que d' JSESSIONID?

5voto

chaoluo Points 1595

UsernamePasswordAuthenticationFilter est utilisée uniquement pour l' /login, et ce dernier filtres ne sont pas?

Non, UsernamePasswordAuthenticationFilter s'étend AbstractAuthenticationProcessingFilter, et il contient un RequestMatcher, cela signifie que vous pouvez définir votre propre traitement url, ce filtre de gérer uniquement le RequestMatcher correspond à l'url de la requête, le traitement par défaut l'url est - /login.

Plus tard, les filtres peuvent toujours répondre à la demande, si l' UsernamePasswordAuthenticationFilter exécute chain.doFilter(request, response);.

Plus de détails sur la base fitlers

Le formulaire de login de l'espace de noms de l'élément d'auto-configuration de ces filtres?

UsernamePasswordAuthenticationFilter est créé par <form-login>, ce sont des filtres Standard d'Alias et de la Commande

Est-ce que chaque demande (authentifié ou non) d'atteindre FilterSecurityInterceptor pour les non-url de connexion?

Elle dépend de l'avant fitlers sont couronnés de succès, mais FilterSecurityInterceptor est le dernier fitler normalement.

Ne configurez deux http éléments de créer deux springSecurityFitlerChains?

Oui, tous les fitlerChain a un RequestMatcher, si l' RequestMatcher correspond à la demande, la demande sera traitée par le fitlers dans le fitler de la chaîne.

La valeur par défaut RequestMatcher correspond à une demande tous si vous n'avez pas de config le modèle, ou vous pouvez config de l'url spécifique (<http pattern="/rest/**").

Si vous voulez connaître plus au sujet de la fitlers, je pense que vous pouvez vérifier le code source de la sécurité printemps. doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X