java смоделировать почтовую форму с редиректом
У меня есть приложение с формой входа. В этом приложении есть сервлет, который может выполнять вход в систему, принимая имя пользователя и пароль (post, без параметров get), а также вход в систему и настройку файла cookie Jsession.
Когда я вызываю этот сервлет с формой поста, он работает.
Но у меня есть другое приложение, куда я хочу перенаправить и автоматически войти в первое приложение. Это будет для демонстрационного использования и, таким образом, будут использоваться статические имя пользователя и пароль. Но я не хочу, чтобы пользователи могли видеть имя пользователя и пароль. Поэтому я хочу использовать пост в Java.
Это работает частично, после того, как пост сделан (логин выполнен), я перенаправляю на страницу в приложении 1. Но тогда я больше не авторизируюсь. Я полагаю, это как-то связано с доменами. Приложения 1 и 2 не находятся в одном домене.
Как я могу исправить мою проблему?
Вот код, который я использую для выполнения почтового запроса
getLog().debug("Open the connection to remote URL(" + remoteURL + ")");
URL url = new URL(remoteURL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setAllowUserInteraction(false);
connection.setDoOutput(true);
OutputStreamWriter wr;
wr = new OutputStreamWriter(connection.getOutputStream());
wr.write(requestParameters);
wr.flush();
wr.close();
response.sendRedirect(redirectURL);
1 ответ
Если вы не используете JAAS для реализации безопасности
- Конечно, когда вы выполняете аутентификацию в App1, вы сохраняете в HttpSession флаг, чтобы знать, аутентифицирован ли пользователь, чтобы избежать необходимости входа в систему при последующих запросах. Таким образом, ServletContainer управляет HttpSession, автоматически отправляя в браузер идентификатор сессии, используя различные механизмы (наиболее распространенный файл cookie).
- Давайте представим, что контейнер сервлетов управляет HttpSession (идентификатор сеанса) с помощью файлов cookie. Когда ваше App2 выполняет вход (и это успешно), вы не сохраняете cookie с идентификатором сеанса для дальнейшего запроса.
- Вам нужно проверить, какой механизм управляет идентификатором сеанса, и повторить поведение браузера в вашем App2 для дальнейших запросов.
Если вы используете JAAS для реализации безопасности. У вас есть два варианта:
- Проверьте, поддерживает ли ваш контейнер сервлетов (или сервер приложений) программный вход в систему. Таким образом, вы можете программно войти в свое приложение 2 в ту же область безопасности приложения 1.
- Проверьте, поддерживает ли контейнер сервлетов (или сервер приложений) SSO. Это позволяет вам настроить оба приложения на использование одной и той же области безопасности, и когда пользователь входит в приложение App1, он автоматически также входит в приложение App2. (Если вы делаете это, проверьте поведение выхода из системы)