1 架构

1.1 过滤器回顾

image.png

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

1 SecurityContextHolder(安全上下文持有者)

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();

3 Authentication(身份验证)

从SecurityContext中获取

Spring项目整合Security