2011-12-14 53 views
0

我们已成功配置Liferay门户以使多个组织映射到不同的子域(即test1.domain.com,test2.domain.com)。具有多个子域和CAS的Liferay

在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

您可以修改com.liferay.portal.servlet.filters.sso.cas.CASFilter,或根据它创建您自己的过滤器。

服务url在processFilter方法中构造,您可以更改它不使用配置中的“服务URL”,而是基于传入的请求属性(模式,服务器名,...)构建它。

+0

你可以创建一个钩子要覆盖的方法? – codeman 2011-12-15 15:21:15

0

您可以创建挂钩修改CASFilter.Class延伸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; 
    }