@startuml

actor User

User -> LoginController : 发送请求访问登录页面
LoginController -> User : 返回登录页面

User -> LoginController : 输入手机号码和验证码，点击“登录”按钮
LoginController -> AuthenticationFilter : 拦截请求，转发给 AuthenticationManager 进行身份认证

AuthenticationManager -> UserDetailsService : 根据手机号码获取用户信息
UserDetailsService -> UserRepository : 查询用户信息
UserRepository --> UserDetailsService : 返回查询结果
UserDetailsService --> AuthenticationManager : 返回用户信息

AuthenticationManager -> SmsCodeAuthenticationProvider : 验证输入的验证码是否正确
SmsCodeAuthenticationProvider -> SmsCodeService : 获取存放在缓存中的正确验证码
SmsCodeService --> SmsCodeAuthenticationProvider : 返回正确的验证码
SmsCodeAuthenticationProvider --> AuthenticationManager : 返回身份验证结果

AuthenticationManager -> AuthenticationFilter : 将身份验证结果返回给 AuthenticationFilter
AuthenticationFilter -> User : 认证成功，将用户信息存储到 SecurityContext 中
User -> LoginController : 登录成功，重定向到首页

@enduml
