SpringSecurity系列——认证(Authentication)架构day2-3(源于官网5.7.2版本)

前言

源于官方最新5.7.2文档,若你觉得官方文档阅读起来很枯燥,内容复杂,我提供了解析概括在每个部分的结尾,我对官方文档的内容做了一些改变,实例代码我会在后续进行更新,请查看如:SpringSecurity系列——认证架构实例代码的文章

但是如果你有能力,还是推荐直接阅读官方文档

Authentication(认证)

身份验证的目的

身份验证在 Spring Security 中有两个主要目的:

  1. AuthenticationManager 的输入,用于提供用户提供的身份验证凭据。 在这种情况下使用时,isAuthenticated() 返回 false。

  2. 表示当前经过身份验证的用户。 当前的Authentication可以从SecurityContext中获取。

身份验证包含:

  1. 主体 - 标识用户。 当使用用户名/密码进行身份验证时,这通常是 UserDetails 的一个实例。
  2. 凭据 - 通常是密码。 在许多情况下,这将在用户通过身份验证后被清除,以确保它不被泄露。
  3. authority - GrantedAuthoritys 是授予用户的高级权限。 一些示例是角色或范围。

授权

Servlet身份认证架构

  • SecurityContextHolder - SecurityContextHolder 是 Spring Security 存储身份验证者详细信息的地方。

  • SecurityContext - 从 SecurityContextHolder 中获取,包含当前经过身份验证的用户的身份验证。

  • 身份验证 - 可以是 AuthenticationManager 的输入,以提供用户提供的用于身份验证的凭据或来自 SecurityContext 的当前用户。

  • GrantedAuthority - 在身份验证上授予主体的权限(即角色、范围等)

  • AuthenticationManager - 定义 Spring Security 的过滤器如何执行身份验证的 API。

  • ProviderManager - AuthenticationManager 最常见的实现。

  • AuthenticationProvider - ProviderManager 使用它来执行特定类型的身份验证。

  • Request Credentials with AuthenticationEntryPoint - 用于从客户端请求凭据(即重定向到登录页面、发送 WWW-Authenticate 响应等)

  • AbstractAuthenticationProcessingFilter - 用于身份验证的基本过滤器。 这也很好地了解了身份验证的高级流程以及各个部分如何协同工作。

SecurityContextHolder(安全上下文持有者)

Spring Security 认证模型的核心是 SecurityContextHolder。 它包含 SecurityContext。
在这里插入图片描述
SecurityContextHolder 是 Spring Security 存储身份验证者详细信息的地方。 Spring Security 不关心 SecurityContextHolder 是如何填充的,如果它包含一个值,则将其用作当前经过身份验证的用户。

指示用户已通过身份验证的最简单方法是直接设置SecurityContextHolder

设置SecurityContextHolder

SecurityContext context = SecurityContextHolder.createEmptyContext();
Authentication authentication =
    new TestingAuthenticationToken("username", "password", 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将自定义的 `AuthenticationProvider` 添加到 `AuthenticationManager` 中,可以按照以下步骤进行操作: 1. 创建一个实现了 `AuthenticationProvider` 接口的类,并实现其中的 `authenticate` 方法。例如: ```java public class MyAuthenticationProvider implements AuthenticationProvider { @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { // 在这里进行身份认证逻辑的实现 } @Override public boolean supports(Class<?> authentication) { // 返回该AuthenticationProvider支持的Authentication类型 return authentication.equals(UsernamePasswordAuthenticationToken.class); } } ``` 2. 在 Spring 配置文件中配置 `AuthenticationManager` 和 `AuthenticationProvider`。例如: ```xml <security:authentication-manager> <security:authentication-provider ref="myAuthenticationProvider"/> </security:authentication-manager> <bean id="myAuthenticationProvider" class="com.example.MyAuthenticationProvider"/> ``` 3. 现在你可以在你的代码中使用 `AuthenticationManager` 进行身份认证了。例如: ```java @Autowired private AuthenticationManager authenticationManager; public void authenticateUser(String username, String password) { Authentication authentication = new UsernamePasswordAuthenticationToken(username, password); authenticationManager.authenticate(authentication); } ``` 在执行 `authenticationManager.authenticate(authentication)` 时,Spring Security 会自动调用 `MyAuthenticationProvider` 的 `authenticate` 方法进行身份认证。如果身份认证成功,则该方法会返回一个 `Authentication` 对象;如果身份认证失败,则会抛出一个 `AuthenticationException` 异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值