具有多个子域和CAS的Liferay

时间:2011-12-14 20:34:08

标签: java tomcat liferay portal cas

我们已成功配置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

有什么想法吗?

2 个答案:

答案 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;
  }