帮忙么网 > Spring > 当前页面

Spring security的执行流程

2025-02-27 NEW个对象

Spring Security 的执行流程: 

1、认证(Authentication):先经过认证过滤器 -> 认证管理器 -> 成功后存入 SecurityContextHolder 
2、授权(Authorization):访问资源时经过授权过滤器 -> 权限判断 -> 允许访问或拒绝访问 
3、所有请求都经过 SecurityFilterChain 过滤

如果项目里需要集成Spring security:

1、定义UserDetailService,用来加载用户信息
2、自定义一个tokenfilter,检验token,将用户信息加载到SecurityContextHolder

3、权限认证

@PreAuthorize是 Spring Security 内置的前置权限注解,添加在接口方法上,声明需要的权限,实现访问权限的控制。

执行详细流程:

[客户端请求] --> [SecurityFilterChain] 过滤器链
  --> [身份认证] UsernamePasswordAuthenticationFilter / JwtAuthenticationFilter
    --> [AuthenticationManager] 认证管理器
      --> [AuthenticationProvider] 认证提供者
        --> [UserDetailsService] 查询用户信息
        --> [PasswordEncoder] 验证密码
    --> [认证成功] 存入 SecurityContextHolder
    --> [授权检查] FilterSecurityInterceptor
      --> [AccessDecisionManager] 权限判断
        --> [投票器] RoleVoter/WebExpressionVoter
      --> [授权成功] 返回资源
      --> [授权失败] 返回 403

login接口里有这么一行代码:

authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));


AuthenticationManager 默认使用的是 ProviderManager,它是 AuthenticationManager 的一个默认实现。ProviderManager 管理一个或多个 AuthenticationProvider,并依次调用它们进行认证。


默认配置:


ProviderManager 默认会注册一个 DaoAuthenticationProvider,这是 Spring Security 中最常用的认证提供者。DaoAuthenticationProvider 会根据 UserDetailsService 来加载用户数据,并通过 PasswordEncoder 来验证密码。


AuthenticationManager 工作原理:


AuthenticationManager authenticationManager = new ProviderManager(Arrays.asList(new DaoAuthenticationProvider()));

ProviderManager 会依次检查各个 AuthenticationProvider 是否支持当前的 Authentication 类型。如果支持,则交给相应的 AuthenticationProvider 来进行认证。

相关文章

  • B树与B+树的区别

    B树与B+树的区别

    NEW个对象 2024-12-25

  • Spring security的执行流程

    Spring Security 的执行流程: 1、认证(Authentication):先经过认证过滤器 -> 认证管理器 -> 成功后存入 SecurityContextHolder 2、授权(Authorization):访问资源时经过授权过滤器 -> 权限判断 -> 允许访问或拒绝访问 3、所有请求都经过 SecurityFilterChain 过滤

    NEW个对象 2025-02-27

  • 事务传播

    事务传播

    NEW个对象 2025-01-01