Цикл перенаправления, когда liferay интегрирован с OpenSSO - PullRequest
2 голосов
/ 02 апреля 2012

Мои программы: Liferay 6.0.6 с Tomocat 6.0.29, OpenSSO 9.5.2_RC1 Build 563 с tomcat 6.0.35, CentOS 6.2 Настройка операционной системы: я настроил как liferay, так и opensso на одном и том же компьютере CenOS, убедившись, чточто оба его tomcat работают на совершенно разных портах, я установил и настроил OpenSSO с Liferay в соответствии с рекомендациями, доступными на форумах liferay. Проблема: когда я нажимаю на URL своего приложения, меня перенаправляют на страницу входа Opensso, что мне и нужно, когда явойти в систему с правильными данными аутентификации, он пытается перенаправить в мое приложение, что именно так оно и должно вести себя, однако это перенаправление происходит в цикле, и я не вижу панель управления моего приложения.Я пришел к выводу, что редирект пытается аутентифицироваться в liferay, но почему-то он не получает того, что ищет, и возвращается к opensso, и это повторяется бесконечно.Я могу найти похожие проблемы, о которых сообщалось здесь.К сожалению, это не сработало.

Позже я решил отладить код liferay и поставил точку останова на com.liferay.portal.servlet.filters.sso.opensso.OpenSSOUtil и com.liferay.portal.servlet.filters.sso.opensso.OpenSSOFilter.Как я понимаю, этот код написан так: сначала он переходит к методу OpenSSOUtil.processFilter (), который получает информацию о настройках openSSO, которую я настроил на liferay, и позже проверяет, аутентифицирован ли он, вызывая метод OpenSSOUtil.isAuthenticated ().Эта конкретная реализация в основном считывает отправленную информацию cookie и пытается установить свойство cookie для liferay, вызывая метод OpenSSOUtil._setCookieProperty ().Вот где он терпит неудачу, он пытается прочитать cookie с именем [iPlanetDirectoryPro] из класса liferay com.liferay.util.CookieUtil, используя объект HttpServletRequest, но все, что он получает, - это NULL.этот набор значений имеет статус аутентификации false и, следовательно, цикл выполняется.

Ниже приведен код из класса com.liferay.util.CookieUtil

public static String get(HttpServletRequest request, String name) {
    Cookie[] cookies = request.getCookies();

    if (cookies == null) {
        return null;
    }

    for (int i = 0; i < cookies.length; i++) {
        Cookie cookie = cookies;

        String cookieName = GetterUtil.getString(cookie.getName());

        if (cookieName.equalsIgnoreCase(name)) {
            return cookie.getValue();
        }
    }

    return null;
}

Может кто-нибудь, пожалуйста, дайте мне знать, почему liferay не можетнайдите куки, которые opensso отправил.Если это связано с настройкой Opensso о включении значения cookie, то я уже сделал то, что уже здесь. В OpenSSO перейдите по ссылке: Конфигурация -> Серверы и сайты -> -> Безопасность -> Cookie -> установите флажок Кодировать значение файла cookie (установите Да)

Что работает: когда выполняется этот цикл, я открываю другую вкладку и явно захожу в свое приложение, из моего приложения, когда я выхожу, он также получает выход из opensso.Это странно для меня.

Для получения дополнительной информации, в то время как этот цикл перенаправления происходит, следующие URL дают мне этот набор информации

http://opensso.ple.com:9090/openam/identity/getCookieNameForToken

 string=iPlanetDirectoryPro

http://opensso.ple.com:9090/openam/identity/isTokenValid

  boolean=true
...