我的软件是: 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