Вход в Liferay через CAS, создание учетной записи через портлет входа

Мы используем Liferay 6.1.0, OpenLDAP для хранения пользователей и CAS для SSO. Я настроил Liferay на использование CAS для входа в систему. Однако вход через CAS работает, только если щелкнуть ссылку «Войти» в правом верхнем углу. Пользователи также могут войти в систему с помощью портлета входа, но при этом не используется CAS. Сначала я подумал, что могу скрыть или удалить портлет входа в систему, чтобы заставить пользователей входить в систему через CAS, но затем я потерял ссылку «Создать учетную запись», которая предоставляется портлетом входа в систему. И мне нужна функция создания учетной записи Liferay, потому что она очень практична (например, она экспортирует новых пользователей в LDAP).

Как я могу получить торт и съесть его? т.е. предлагать ссылку «Создать учетную запись» Liferay, не показывая остальную часть портлета входа, и «заставлять» уже зарегистрированных пользователей входить в систему только через CAS? Любая помощь будет оценена по достоинству. Спасибо.


person Laryx Decidua    schedule 05.11.2012    source источник


Ответы (1)


Отвечая на мой собственный вопрос, когда я, наконец, понял это...

Я создал хук для замены файла JSP $TOMCAT/webapps/ROOT/html/portlet/login/login.jsp, где $TOMCAT — это каталог сервера Tomcat в комплекте Liferay. (Ознакомьтесь с руководством 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>

По общему признанию, это хак, но он работает. :-)

person Laryx Decidua    schedule 13.11.2012
comment
Предупреждение: Liferay страдает болезнью JavaEE, заключающейся в половинчатом решении простых задач излишне сложным образом, документация недостаточно детализирована. Часть управления контентом неуклюжа по сравнению, например. Опечатка3. Реализация бэкэнда БД пугает: в БД нет ограничений ссылочной целостности, все параметры конфигурации сбрасываются в одну строковую запись в формате XML вместо таблицы с 2 столбцами параметров и значений, как это сделал бы любой здравомыслящий дизайнер.. , Избегайте, если можете. - person Laryx Decidua; 22.04.2013
comment
Привет, как тебе удалось экспортировать пароль в ldap в первый раз. Он экспортируется для меня, только если я использую портлет входа в систему для входа и сброса пароля. - person sree; 08.12.2014
comment
@sree Спасибо за вопрос, но, к счастью, мои обстоятельства изменились, и мне больше не нужно работать с этой дымящейся кучей дерьма :-) Поэтому я не могу ответить на ваш вопрос. Позвольте мне повторить мой совет выше: избегайте этого программного обеспечения, если можете. - person Laryx Decidua; 08.12.2014
comment
к сожалению, это выбор нашего клиента, а не мой. :) не избежать - person sree; 08.12.2014