0

Liferay 6.1.0、ユーザーの保存には OpenLDAP、SSO には CAS を使用します。ログインにCASを使用するようにLiferayを設定しました。ただし、CAS 経由のログインは、右上隅の [サインイン] リンクをクリックした場合にのみ機能します。ユーザーはログイン ポートレットを介してログインすることもできますが、これは CAS を使用しません。最初に、ログイン ポートレットを非表示または削除して、ユーザーに CAS 経由でのログインを強制できると考えましたが、その後、ログイン ポートレットによって提供される [アカウントの作成] リンクが失われます。また、Liferay の Create Account 機能が非常に実用的であるため必要です (たとえば、新しいユーザーを LDAP にエクスポートします)。

どうすればケーキを持って食べられますか? つまり、ログイン ポートレットの残りの部分を表示せずに Liferay の [アカウントの作成] リンクを提供し、既に登録されているユーザーに CAS のみを介してログインを「強制」しますか? どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

0

私が最終的にそれを理解したので、私自身の質問に答えます...

Liferay バンドルの Tomcat サーバー ディレクトリにある$TOMCAT/webapps/ROOT/html/portlet/login/login.jspJSPファイルを置き換えるフックを作成しました。$TOMCAT( JSP フックの作成方法については、 Liferay ガイドを確認してください。)

アイデアは、CAS が有効になっているかどうかをテストし、有効になっている場合は、フォームのユーザー名、パスワード フィールド、およびログイン ボタンを「非表示」にすることです。Liferay Shibboleth プラグインで見つけたテスト条件。101行目あたりから始まるJSPの関連部分は次のとおりです。

        <liferay-ui:error exception="<%= UserPasswordException.class %>" message="authentication-failed" />
        <liferay-ui:error exception="<%= UserScreenNameException.class %>" message="authentication-failed" />

    <%-- When CAS is enabled, don't show the normal login fields --%>
    <c:choose>
        <c:when test="<%= PrefsPropsUtil.getBoolean(company.getCompanyId(), PropsKeys.CAS_AUTH_ENABLED, PropsValues.CAS_AUTH_ENABLED) %>" >
            <%-- CAS is enabled --%>
            <div><p>
            Please sign in via CAS using the "Sign In" link in the upper right corner.
            </p></div>
        </c:when>
        <c:otherwise>   <%-- original login fields --%>
            <aui:fieldset> 
                <%
                String loginLabel = null;

                if (authType.equals(CompanyConstants.AUTH_TYPE_EA)) {
                    loginLabel = "email-address";
                }
                else if (authType.equals(CompanyConstants.AUTH_TYPE_SN)) {
                    loginLabel = "screen-name";
                }
                else if (authType.equals(CompanyConstants.AUTH_TYPE_ID)) {
                    loginLabel = "id";
                }
                %>

                <aui:input label="<%= loginLabel %>" name="login" showRequiredLabel="<%= false %>" type="text" value="<%= login %>">
                    <aui:validator name="required" />
                </aui:input>

                <aui:input name="password" showRequiredLabel="<%= false %>" type="password" value="<%= password %>">
                    <aui:validator name="required" />
                </aui:input>

                <span id="<portlet:namespace />passwordCapsLockSpan" style="display: none;"><liferay-ui:message key="caps-lock-is-on" /></span>

                <c:if test="<%= company.isAutoLogin() && !PropsValues.SESSION_DISABLED %>">
                    <aui:input checked="<%= rememberMe %>" inlineLabel="left" name="rememberMe" type="checkbox" />
                </c:if>
            </aui:fieldset>

            <aui:button-row>
                <aui:button type="submit" value="sign-in" />
            </aui:button-row>
        </c:otherwise>
        </c:choose>
        <%-- end of CAS-dependent login field part --%>

    </aui:form>

確かにこれはハックですが、機能します。:-)

于 2012-11-13T14:01:37.213 に答える