我得出的结论是重定向正在尝试在 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