Jasig CAS — как настроить WebFlow для перенаправления пользователя после успешного входа в систему?

Я пытаюсь интегрировать аутентификацию CAS в наши веб-службы и использовать сервер Jasig CAS (v. 4.2), веб-приложение на основе Spring.

К сожалению, сервер Jasig CAS может использовать идентификатор службы для перенаправления только после успешного входа в систему. Это неприемлемо, так как сервер CAS находится за обратным прокси и мы не используем DNS. Итак, URL-адрес для входа выглядит так:

http://a.b.c.d/cas/login?service=http://x.x.x.x/context-path/auth-entry-point

где

  • a.b.c.d - внешний (прокси) IP-адрес
  • x.x.x.x - внутренний (сервисный/CAS-клиент) IP-адрес

Я читал документы Jasig, но не нашел способа запутать URL-адрес службы. На данный момент я пытаюсь реализовать пользовательскую логику. Я хочу передать URL-адрес перенаправления как отдельный параметр:

http://a.b.c.d/login?service=<serviceUID_like_YYY-YYY-YYY>&redirect=<base64_encoded_URL>

.. и использовать этот параметр для перенаправления вместо идентификатора службы.

Согласно документу Jasig CAS использует Spring Webflow для реализации сценария входа в систему (login-webflow.xml). И это место, где перенаправление вызвало:

<end-state id="redirectView" view="externalRedirect:#{requestScope.response.url}"/>

Поскольку я не знаком с Spring Weblow, вопрос:

Как я могу получить параметр URL "перенаправления", декодировать и использовать его для перенаправления?

P.S. Извините за мой плохой английский, я надеюсь, что это хотя бы разборчиво :-)


person JDoeNext    schedule 11.04.2016    source источник


Ответы (1)


Хорошо, это было довольно просто. Для всех, кому интересно:

Создайте собственный сервисный компонент в пакете org.jasig.cas.*:

package org.jasig.cas.usercustom;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.Base64Utils;

@Component("userCustomRedirectHelper")
public class RedirectHelper {

    final static Logger logger = LoggerFactory.getLogger(RedirectHelper.class);

    public String decodeURLFromString(String src) {
        String url = new String(Base64Utils.decodeFromString(src));
        logger.debug("Redirect URL: " + src);
        return url;
    }
}

Измените login-webflow.xml следующим образом:

<on-start>
    <!-- get redirect param, decode and place into flowScope -->
    <evaluate expression="userCustomRedirectHelper.decodeURLFromString(requestParameters.redirect)" result="flowScope.customRedirectURL" />
</on-start>

<!-- redirect -->
<end-state id="redirectView" view="externalRedirect:#{flowScope.customRedirectURL}"/>
person JDoeNext    schedule 12.04.2016