Зависит от того, как вы храните учетные данные пользователя:
Если вы реализуете UserDetails
и CredentialsContainer
для своей пользовательской сущности, то вы можете добавить какое-то логическое поле для сброса пароля с каким-то уникальным идентификатором, который будет отправлен как часть URL, если пользователь перейдет к правильному URL по ссылке и он сбросил логический флаг сброса пароля, затем покажите ему форму, которая обновляет пароль и отключает флаг сброса пароля при отправке.