Что я сделал, так это перетянул исходный (перенаправленный) URL в скрытое поле ввода в форме входа.Код, выполняющий аутентификацию, должен просто проверить этот параметр, и если он не пустой, он может перенаправить после установления сеанса.
Вы должны быть осторожны, чтобы предотвратить атаки XSS и т. Д., Но это не так сложнои это работает просто отлично.
В моей структуре (Stripes) я могу нажать исходный URL (взятый из объекта HttpServletRequest, комбинации пути сервлета, «информации о пути» и строки запроса)в специальное поле хранения, которое заставит фреймворк вернуть его мне при следующем запросе в качестве параметра.Без этого проще всего добавить URL в качестве параметра при перенаправлении.Просто зашифруйте URL-адрес исходного попытанного URL-адреса и прикрепите его к URL-адресу перенаправления с некоторым именем параметра.Затем на странице входа в систему вы просто проверяете это:
<c:if test='${not empty param.attemptedUrl}'>
<input type='hidden' name='attemptedUrl' value='${fn:escapeXml(param.attemptedUrl)}'>
</c:if>
Тогда ваше действие входа в систему также получит этот параметр при отправке формы входа и может действовать в соответствии с ней.