我意识到Spring安全性构建在过滤器串联上,它将拦截请求,检测(缺乏)身份验证,重定向到身份验证入口点或将请求传递给授权服务,最终让请求命中 servlet 服务或者抛出安全异常(未经身份验证或未经授权)。DelegatingFitlerProxy将这些过滤器粘合在一起。为了执行它们的任务,这些过滤器访问诸如UserDetailsService和AuthenticationManager这样的服务。
串联中的主要过滤器如下(按顺序)
我不明白这些过滤器是如何使用的。是否对于spring提供的form-login, UsernamePasswordAuthenticationFilter只用于/登录,而后面的过滤器不是?登录名称空间元素是否自动配置这些过滤器?是否每个请求(验证与否)到达FilterSecurityInterceptor非登录url?
如果我想用JWT-token来保护我的REST API,这是从登录中检索的?我必须配置两个命名空间配置http
标签,权利?一个用于带有UsernamePasswordAuthenticationFilter
的/登录,另一个用于带有自定义JwtAuthenticationFilter
的REST url。
配置两个http
元素是否会创建两个springSecurityFitlerChains
?在我声明form-login
之前,UsernamePasswordAuthenticationFilter
是否默认关闭?我如何用一个过滤器替换SecurityContextPersistenceFilter
,它将从现有的JWT-token
而不是JSESSIONID
中获得Authentication
?