Аутентификация через сервлет - PullRequest
4 голосов
/ 30 ноября 2011

У меня есть ситуация, как показано ниже:

У меня есть 2 веб-приложения, работающие на Tomcat.Сначала пользователь входит в приложение 1, а затем.Существует ссылка на Приложение 2. При нажатии на ссылку Пользователь должен быть перенаправлен на второе приложение.

Оба приложения используют аутентификацию LDAP.

Теперь проблема заключается в том, что второе приложение имеет собственную систему аутентификации.

Итак, мы планируем неявную аутентификацию пользователя, вошедшего в первую систему.

Я написал сервлет, который запускается, когда я нажимаю на ссылку для App2 в App1.

Я пытаюсь использовать приведенный ниже код, который должен вызывать сервлет «ldap-login» в app2 с заданными параметрами. Имена параметров верны.

String targetURL = "http://localhost:8080/app2/ldap-login";

    HttpClient client = new HttpClient();

    PostMethod doPost = new PostMethod(targetURL);

    //doPost.getParams().setBooleanParameter(HttpMethodParams.USE_EXPECT_CONTINUE, true);
    doPost.addParameter("login_netid", "alice");
    doPost.addParameter("login_password", "alice");
    try {
        int status = client.executeMethod(doPost);
        if (status == HttpStatus.SC_OK) {
             // redirect
            response.sendRedirect("http://localhost:8080/app2/myPage");
        } else {
            System.out.println("Service failed, Response Code= " +                  
                HttpStatus.getStatusText(status));  
            System.out.println("Response Body --> " + doPost.getResponseBodyAsString());
        }
     } catch (Exception ex) {
         System.out.println("ERROR: " + 
         ex.getClass().getName() + " "+ ex.getMessage());
         ex.printStackTrace();
      } finally {
                doPost.releaseConnection();
      }

Но я получаю ответ «Временно перемещен".

Может кто-нибудь предложить мне альтернативу?

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

A 302 Moved Временный ответ - это просто перенаправление.Это именно тот ответ, который вы получите, когда сделаете response.sendRedirect().Вы также можете очень хорошо получить перенаправление в ответ на успешный вход в систему.Я предлагаю проверить на втором приложении, действительно ли оно не перенаправляет, когда вход в систему успешен.Затем вы должны проверить, является ли код ответа 302 вместо 200. Или, в качестве альтернативы, вы должны указать HttpClient автоматически выполнять любые перенаправления.

Еще больше, если вход в систему действительно не удался, какой ответВы бы получили от второго приложения?Будет ли генерировать исключение и, таким образом, возвращать код ответа 500?Или он просто установит какое-либо сообщение об ошибке в области запроса и перезапустит JSP форвардом, оставив при этом код ответа 200?Как бы вы тогда отличали 200 при неудачной регистрации от 200 при успешной регистрации?


Не связано с конкретной проблемой, ваш подход, скорее всего, не будет работать, если второе приложениене использует тот же сеанс, что и первое приложение.Логин обычно хранится в сеансе, но вы нигде не ведете сеанс.Во всяком случае, это тема для нового вопроса:)

0 голосов
/ 05 декабря 2011

Согласно API doc , вызов sendRedirect выполняет временное перенаправление.Как уже упоминалось @BalusC, вам нужно обработать код ответа SC_MOVED_TEMPORARILY или SC_FOUND.

. Причина, по которой он выполняет перенаправление после входа в систему (или может быть после любого запроса POST ), может бытьчтобы избежать проблемы Double Submit . Здесь - еще одна статья на эту тему.

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