Java-сервлет перенаправляет из одного сервлета в другой, а затем обратно в исходный сервлет - PullRequest
1 голос
/ 16 октября 2011

У меня возник вопрос о Java-сервлетах.

Допустим, я на веб-странице сервлета, «somePage».Я хочу войти (используя другой сервлет, сервлет 'login').Поэтому я нажимаю на ссылку входа в систему на странице somePage и перенаправляюсь на страницу входа в систему.Я ввожу свое имя и пароль, и они оба верны.страница входа в систему успешно зарегистрировала меня.

(теперь спрашивает о кодировании для сервлета 'login') Как мне кодировать страницу 'login', чтобы она перенаправляла успешно вошедшего в систему человека обратно в,веб-страница somePage?

Основной вопрос. Откуда страница входа в систему узнает, что страница, которая первоначально была перенаправлена ​​на нее, является страницей somePage?

Я выбрал много параметров запроса, но не говорите мне, да, вы были перенаправлены со страницы 'somePage'.Вот параметры, на которые я смотрел:

String authType = request.getAuthType();
String pathInfo = request.getPathInfo();
String pathTranslated = request.getPathTranslated();
String getUserName = request.getRemoteUser();
String remoteAdd = request.getRemoteAddr();
String uriString = request.getRequestURI();
String sessionID = request.getRequestedSessionId();
String serverName = request.getServerName();
Integer serverPort = request.getServerPort();
String servletPath = request.getServletPath();

Я знаю, что некоторые из них явно не дают мне ответа, который я ищу, но я полагаю, что один из параметров HttpServletRequest должен сказатьстраница входа в систему, которая попросила его отобразить.Любая помощь будет принята с благодарностью.Я собираюсь продолжить поиск ответа.Я пытался найти этот вопрос, но не нашел ответа.

Ответы [ 2 ]

3 голосов
/ 16 октября 2011

Вместо того, чтобы реализовать себя, вы должны рассмотреть возможность использования аутентификации на основе форм для своего веб-приложения.

Почти все контейнеры сервлетов поддерживают это.

Сначала необходимо настроить безопасность.Это зависит от вашего сервера приложений.Т.е. с Jetty вы можете использовать подход базы данных с таблицами для пользователей и их ролей или LDAP и т. Д.

В web.xml вы включаете аутентификацию на основе форм:

<login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
    <form-login-page>/logon.jsp</form-login-page>
    <form-error-page>/logonError.jsp</form-error-page>
  </form-login-config>
 </login-config>

Вы указываете две страницы JSP, которые вы должны предоставить.logon.jsp - страница входа для ввода имени пользователя и пароля.logonError.jsp отображается, если имя пользователя и пароль неверны.

Весь рабочий процесс входа в систему обрабатывается сервером приложений.

Если пользователь сначала переходит на защищенный URL-адрес, сервер приложенийвместо этого представляет страницу входа.Как правило, поля ввода для имени пользователя и пароля должны называться j_username и j_password.Когда пользователь отправляет форму входа в систему, сервер проверяет, действительны ли учетные данные пользователя (в соответствии с его конфигурацией).Если это так, пользователь перенаправляется на исходную страницу.В противном случае отображается страница ошибки входа в систему.

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

1 голос
/ 16 октября 2011

Есть разные способы сделать это.Один из способов заключается в том, чтобы ваша страница входа поддерживала параметр continue CGI, который дает URL-адрес для перенаправления после успешного входа в систему.Еще один способ сделать это - использовать заголовок «Referer», который был передан на страницу входа, и перенаправить на этот URL.

Для первого можно использовать ServletRequest.getParameterMap () * 1005.* получить аргументы CGI и определить, есть ли параметр CGI с именем continue (или любое другое имя, которое вы выберете для этого параметра CGI);для последнего вы можете использовать HttpServletRequest.getHeader () , чтобы получить заголовок «Referer».

...