0

我们使用 Liferay 6.1.0,OpenLDAP 用于存储用户,CAS 用于 SSO。我将 Liferay 配置为使用 CAS 登录。但是,只有单击右上角的“登录”链接才能通过 CAS 登录。用户也可以通过 Login portlet 登录,但不使用 CAS。首先,我认为我可以隐藏或删除登录 portlet 以强制用户通过 CAS 登录,但随后我丢失了登录 portlet 提供的“创建帐户”链接。而且我需要 Liferay 的创建帐户功能,因为它非常实用(例如,它将新用户导出到 LDAP)。

我怎样才能吃蛋糕呢?即提供Liferay 的创建帐户链接而不显示登录portlet 的其余部分,并且“强制”已经注册的用户仅通过CAS 登录?任何帮助,将不胜感激。谢谢。

4

1 回答 1

0

回答我自己的问题,因为我终于弄明白了......

我创建了一个挂钩来替换Liferay 包中的 Tomcat 服务器目录$TOMCAT/webapps/ROOT/html/portlet/login/login.jsp所在的 JSP 文件。$TOMCAT(查看Liferay 指南,了解如何创建 JSP 挂钩。)

这个想法是测试是否启用了 CAS,如果是,则“隐藏”表单中的用户名、密码字段和登录按钮。我在 Liferay Shibboleth 插件中找到的测试条件。这是 JSP 的相关部分,从第 101 行或附近开始:

        <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>

诚然,这是一个 hack,但它确实有效。:-)

于 2012-11-13T14:01:37.213 回答