Java 第三方包-Spring Security

wiki

1. 核心名词

  • principal : 主体,使用系统的用户或设备或从其他系统远程登录的用户等。简单说就是谁使用系统谁就是主体
  • authentication : 认证,权限管理系统确认一个主体的身份,允许主体进入系统。简单说就是“主体”证明自己是谁
  • authorization : 授权,将操作系统的“权力”授予“主体”,这样主体就具备了操作系统中特定功能的能力。简单说就是给用户分配权限

2. 代码

Spring Security 本质是一个过滤器链,同时 这些 Filter 作为 Bean 被 Spring 管理,它们并不直接处理用户的认证,也不直接处理用户的授权,而是把它们交给了认证管理器(AuthenticationManager)和决策管理器 (AccessDecisionManager)进行处理。

处理过程为:

1
2
request  -> SecurityContextPersistenceFilter -> UsernamePasswordAuthenticationFilter -> FilterSecurityInterceptor -> 资源
response <- SecurityContextPersistenceFilter <- UsernamePasswordAuthenticationFilter <- FilterSecurityInterceptor <- 资源
  • SecurityContextPersistenceFilter : 这个 Filter 是整个拦截过程的出入口,会在请求开始时从中获取 SecurityContext,然后把它设置给 SecurityContextHolder。在请求完成后将之再保存到 SecurityContextRepository,同时清除持有的 SecurityContext
  • UsernamePasswordAuthenticationFilter : 用于处理来自表单提交的认证。该表单必须提供对应的用户名和密码,内部调用 AuthenticationManager ,并提供登录成功或失败后处理的 AuthenticationSuccessHandlerAuthenticationFailureHandler
  • FilterSecurityInterceptor : 用于保护 Web 资源。使用 AccessDecisionManager 对当前用户进行授权访问