Перенаправление страницы входа в Java и Javascript - PullRequest
3 голосов
/ 20 июня 2011

Хорошо, у меня есть интересный случай перенаправления страницы входа.
В моем веб-сервисе есть страница входа (login.html) с некоторым javascript для обработки входа и перенаправления на жестко закодированную страницу по умолчанию.,Веб-служба написана на Java с фильтром сервлета, обрабатывающим перенаправление, если пользователь не прошел проверку подлинности (поэтому, если пользователь пытается получить доступ к domain/statistics без входа в систему, они направляются на domain/login.html).Перенаправление из защищенных сервисов работает: я могу перенаправить на страницу входа в систему, и после аутентификации пользователя перенаправить их на страницу по умолчанию.У меня, однако, возникают проблемы с перенаправлением на предыдущую страницу.
Я знаю, что это обычно обрабатывается с помощью аргумента document.referrer в Javascript, который я пробовал, но из-за перенаправления Java с response.sendRedirect, RefererЗаголовок не отправлен.

Как я могу заставить эти два аспекта перенаправить на ранее вызванную страницу?Это то, что мне нужно добавить на стороне Javascript, на стороне Java или на обоих?

Ответы [ 2 ]

0 голосов
/ 20 июня 2011

Send Redirect попросит клиента повторить запрос на выбранный вами ресурс.Вы думаете о Spring Security с минимальной конфигурацией, вы можете достичь этого довольно легко.

Взгляните на это:

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns-config.html

0 голосов
/ 20 июня 2011

Что я сделал, так это перетянул исходный (перенаправленный) 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>

Тогда ваше действие входа в систему также получит этот параметр при отправке формы входа и может действовать в соответствии с ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...