2

我得出的结论是重定向正在尝试在 liferay 中进行身份验证,但不知何故它没有得到它正在寻找的东西并返回到 opensso,这会无限重复。我可以在这里找到类似的问题。不幸的是,它没有奏效。

后来我决定调试 liferay 代码,并在 com.liferay.portal.servlet.filters.sso.opensso.OpenSSOUtil 和 com.liferay.portal.servlet.filters.sso.opensso.OpenSSOFilter 上设置了一个断点。我理解这段代码的编写方式是它首先进入 OpenSSOUtil.processFilter() 方法,该方法获取我在 liferay 上配置的 openSSO 设置信息,然后通过调用方法 OpenSSOUtil.isAuthenticated() 检查它是否经过身份验证。这个特定的实现基本上读取发送的 cookie 信息,并尝试通过调用 OpenSSOUtil._setCookieProperty() 方法在 liferay 上设置 cookie 属性。这是它失败的地方,它尝试使用 HttpServletRequest 对象从 liferay 类 com.liferay.util.CookieUtil 中读取名称为 [iPlanetDirectoryPro] 的 cookie,但它得到的只是 NULL。

以下是类中的代码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无法找到openso发送的cookie。如果它与关于启用 cookie 值的 Opensso 设置有关,那么我已经完成了在 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
4

0 回答 0