
客户端向应用程序发送一个请求,容器创建一个 FilterChain,其中包含 Filter 实例和 Servlet,应该根据请求URI的路径来处理 HttpServletRequest。在Spring MVC应用程序中,Servlet是 DispatcherServlet 的一个实例。一个 Servlet 最多可以处理一个 HttpServletRequest 和 HttpServletResponse。
Spring Security 身份验证模型的核心是SecurityContextHolder

Spring Security 存储了已验证SecurityContextHolder用户的详细信息。
表明用户已经过身份验证的最简单方法是SecurityContextHolder直接设置。
SecurityContext context = SecurityContextHolder.createEmptyContext();
Authentication authentication =
new TestingAuthenticationToken("username", "password", "ROLE_USER");
context.setAuthentication(authentication);
SecurityContextHolder.setContext(context);
代码访问已验证用户
SecurityContext context = SecurityContextHolder.getContext();
Authentication authentication = context.getAuthentication();
String username = authentication.getName();
Object principal = authentication.getPrincipal();
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
从SecurityContext中获取
principal标识用户。使用用户名/密码进行身份验证时,这通常是 的一个实例UserDetails。credentials通常是密码。在许多情况下,用户通过身份验证后会清除密码,以确保密码不被泄露。authorities [GrantedAuthoritys](https://docs.spring.io/spring-security/site/docs/5.3.3.RELEASE/reference/html5/#servlet-authentication-granted-authority)是授予用户的高级权限。例如,角色或范围。