2011-12-14 7 views
0

Liferayポータルで、複数の組織が異なるサブドメイン(つまり、test1.domain.com、test2.domain.com)にマッピングされるように設定しました。複数のサブドメインとCASを持つLiferay

Liferay内でCASを有効にすると問題が発生します。 CASサーバーはwww.domain.comにあります。サブドメインの1つ(test1.domain.comなど)にログインしようとすると、CASにリダイレクトされ、CASがLiferayにリダイレクトされることに気付きました。ただし、test1.domain.comとリダイレクトする代わりに、www.domain.comにリダイレクトされます。 Liferayが最初にCASにリダイレクトするとき、サービスURLの一部としてサブドメインを送信せず、代わりにサービスURLのwww.domain.comを送信しているようです。

私はあなたがLiferay内でCASサービスのURLを設定できることは知っていますが、ログインしようとしているLiferayの組織/サブドメインに基づいて動的にする必要があります。 test1.domain.comにログインすると、CASに送信されるサービスURLはservice = http://test1.domain.comのようになります

アイデアはありますか?

答えて

0

com.liferay.portal.servlet.filters.sso.cas.CASFilterを変更するか、それに基づいて独自のフィルタを作成できます。

service urlがprocessFilterのメソッドで構築されているため、設定から「サービスURL」を使用しないように変更できますが、着信リクエストのプロパティ(schema、serverNameなど)に基づいて構築します。

+0

あなたがメソッドをオーバーライドするフックを作成することができますを拡張変更フックを作成することができますか? – codeman

+0

http://www.liferay.com/community/forums/-message_boards/message/8863948に従うことができますが、試していません。 –

0

あなたはCASFilter.ClassBaseFilter

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; 
    } 
関連する問題