我们已成功配置Liferay门户,使多个组织映射到不同的子域(即test1.domain.com,test2.domain.com)。
当我们在Liferay中启用CAS时会出现问题。 CAS服务器位于www.domain.com上。我们注意到,当您尝试登录其中一个子域(例如test1.domain.com)时,它会重定向到CAS,然后CAS会重定向回Liferay。但是,它不是重定向回test1.domain.com,而是重定向回www.domain.com。看起来当Liferay最初重定向到CAS时,它不会将子域作为服务URL的一部分发送,而是发送www.domain.com作为服务URL。
我知道您可以在Liferay中设置CAS服务URL,但我们需要根据您尝试登录的Liferay的组织/子域来实现动态。因此,如果您登录test1.domain.com,发送给CAS的服务URL将类似于service = http://test1.domain.com
有什么想法吗?
答案 0 :(得分:0)
您可以修改com.liferay.portal.servlet.filters.sso.cas.CASFilter,或者根据它创建自己的过滤器。
服务url是在方法processFilter中构造的,在那里你可以改变它不使用配置中的“服务URL”,而是根据传入的请求属性(schema,serverName,...)来构造它。
答案 1 :(得分:0)
您可以创建钩子修改CASFilter.Class
extends BaseFilter
public boolean isFilterEnabled(HttpServletRequest request, HttpServletResponse response)
{
try
{
long companyId = PortalUtil.getCompanyId(request);
boolean CAS_AUTH_ENABLED_VALUE = GetterUtil.getBoolean(
PropsUtil.get(CAS_AUTH_ENABLED));
Boolean CAS_AUTH_ENABLE_CONFIG = GetterUtil.getBoolean(
PrefsPropsUtil.getString(companyId,
CAS_AUTH_ENABLED));
boolean CAS_AUTH_ENABLE_VALUE_FINAL = Validator.isNotNull(CAS_AUTH_ENABLE_CONFIG) ? CAS_AUTH_ENABLE_CONFIG : CAS_AUTH_ENABLED_VALUE;
if (CAS_AUTH_ENABLE_VALUE_FINAL) {
return true;
}
}
catch (Exception e)
{
_log.error(e, e);
}
return false;
}
protected Log getLog()
{
return _log;
}