当liferay与OpenSSO集成时重定向循环

时间:2012-04-02 11:08:51

标签: liferay opensso

我的软件是: Liferay 6.0.6与Tomocat 6.0.29,OpenSSO 9.5.2_RC1 Build 563与tomcat 6.0.35,CentOS 6.2操作系统 建立: 我在同一台CenOS机器上设置了liferay和opensso,确保它的两个tomcat都运行在非常不同的端口上,我已根据liferay论坛上提供的指南安装并配置了Liferay的OpenSSO 问题: 当我点击我的应用程序URL时,我被重定向到Opensso登录页面,这是我想要的,当我使用正确的身份验证详细信息登录时,它试图重定向到我的应用程序,这正是它应该如何表现,但是这个重定向进入一个循环而我看不到我的应用程序仪表板。我得出的结论是重定向试图在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。此值集的身份验证状态为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发送的cookie。如果它与Opensso设置有关启用cookie值,那么我已经完成了已经在这里 在OpenSSO中转到:配置 - &gt;服务器和站点 - &gt; - &GT;安全 - &gt; Cookie - &gt;检查编码Cookie值(设置为是)

什么有效: 当这个循环正在执行时,我打开另一个标签并明确登录我的应用程序,从我的应用程序,当我注销它也从opensso注销。这对我来说很奇怪。

有关更多信息,当发生此重定向循环时,URL会给我这些信息

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

 string=iPlanetDirectoryPro

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

  boolean=true

0 个答案:

没有答案