登录后置处理
当用户在 Pigx 中成功登录时,系统会自动触发一系列操作。这些操作由 PigxAuthenticationSuccessEventHandler 这个类来负责执行,就像一个"登录成功后的自动处理工厂"。
登录成功后会发生什么?
1. 清除登录失败的记录
clearLoginFailureTimes(authentication);
通俗解释:用户成功登录后,系统会清除之前的"登录失败次数"记录。
- 如果用户之前尝试登录失败了5次,现在成功登录,那么这个失败次数就会被重置为0
- 这样做的好处是:下一次登录失败时,不会因为之前的失败而被额外处罚
2. 记录登录成功的日志
sendSuccessEventLog(request, accessTokenAuthentication, map);
通俗解释:系统会把"谁在什么时间、从哪个IP地址、用什么设备成功登录了"这些信息记录下来。
- 就像酒店的前台会在登记簿上记录"张三在2025年1月15日下午3点入住了"
- 这些日志可以用来做审计、追踪用户操作历史、发现异常登录等
3. 返回登录令牌(Token)
sendAccessTokenResponse(response, authentication);
通俗解释:系统会生成一个"通行证"(Token)并发送给用户的浏览器/客户端。
- 这个 Token 就是用户进入系统的凭证,类似于电影票
- 用户后续访问系统的各个功能时,都需要出示这个 Token
- 系统看到这个有效的 Token,就知道这个用户已经登录了
完整的流程图
用户输入账号密码
↓
Spring Security 验证
↓
✅ 验证成功!
↓
触发 AuthenticationSuccessHandler
↓
┌────────────────────────────────┐
│ │
↓ ↓
清除失败次数 记录登录日志
│ │
└────────────────────────────────┘
↓
生成并返回 Token
↓
用户收到 Token,登录完成!
如何进行自定义业务操作?
如果你想在用户登录成功后执行自己的业务逻辑(比如给用户发送登录成功的邮件、更新用户最后登录时间等),可以在这个类中添加代码。
示例:登录成功后更新用户的最后登录时间
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) {
// 原有代码
clearLoginFailureTimes(authentication);
// 原有代码
OAuth2AccessTokenAuthenticationToken accessTokenAuthentication =
(OAuth2AccessTokenAuthenticationToken) authentication;
Map<String, Object> map = accessTokenAuthentication.getAdditionalParameters();
if (MapUtil.isNotEmpty(map)) {
sendSuccessEventLog(request, accessTokenAuthentication, map);
}
// 你的自定义业务逻辑
// 例如:更新用户最后登录时间
updateUserLastLoginTime(authentication);
// 例如:发送登录成功通知
sendLoginSuccessNotification(authentication);
// 原有代码
sendAccessTokenResponse(response, authentication);
}
关键概念解释
| 概念 | 解释 |
|---|
| Authentication | 认证对象,包含了用户的身份信息 |
| Token | 令牌,用户登录后获得的"通行证" |
| HttpServletRequest | HTTP请求对象,包含用户请求的信息(IP、浏览器等) |
| HttpServletResponse | HTTP响应对象,用来返回数据给客户端 |
总结
Pigx 的登录成功处理机制会自动完成三个重要的任务:
- 重置失败记录 - 保护账号安全
- 记录登录日志 - 方便审计和追踪
- 颁发登录凭证 - 允许用户访问系统
而且这个类是可扩展的,你可以在不修改原有代码的情况下,添加你自己的业务逻辑!