登录后置处理

当用户在 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令牌,用户登录后获得的"通行证"
HttpServletRequestHTTP请求对象,包含用户请求的信息(IP、浏览器等)
HttpServletResponseHTTP响应对象,用来返回数据给客户端

总结

Pigx 的登录成功处理机制会自动完成三个重要的任务:

  1. 重置失败记录 - 保护账号安全
  2. 记录登录日志 - 方便审计和追踪
  3. 颁发登录凭证 - 允许用户访问系统

而且这个类是可扩展的,你可以在不修改原有代码的情况下,添加你自己的业务逻辑!