在关于如何在Spring Boot应用程序(https://auth0.com/blog/implementing-jwt-authentication-on-spring-boot/)中实现JWT身份验证的优秀教程之后,我已经看到/ login由过滤器而不是控制器处理。这不是布鲁诺的随心所欲,Spring正在为自己提供一个过滤器(UsernamePasswordAuthenticationFilter等)。
为什么要使用过滤器?是因为它放置在授权过滤器之前,并且这样我们可以拦截新的登录尝试而不受身份验证过滤器的影响?
谢谢! 恩里克
答案 0 :(得分:1)
过滤器链是spring-security
核心概念之一。 spring-security
documentation的简介说明了以下好处:
Spring Security的Web基础结构完全基于标准的servlet过滤器。 [...]
Spring Security在内部维护一个过滤器链,其中每个过滤器都负有特殊责任,并且根据需要的服务将过滤器添加到配置中或从配置中删除。
通常来说:您使用spring
之类的框架来处理标准的应用程序流,例如您的案例身份验证和登录。 spring-security
的概念就是过滤链。由于使用框架会带来一些收益(例如开销),因此强烈建议您使用框架为您提供的可能性。
在您的情况下,/login
由UsernamePassworAuthenticationFilter
处理。该过滤器会带来一些用于登录处理的标准逻辑并处理身份验证,因此不会由控制器处理。
过滤器(
UsernamePassworAuthenticationFilter
)调用已配置的AuthenticationManager
以处理每个身份验证请求。认证成功或认证失败后的目的地分别由AuthenticationSuccessHandler
和AuthenticationFailureHandler
策略接口控制。过滤器具有允许您设置这些属性的属性,因此您可以完全自定义行为