2

Web サービスに CAS 認証を統合し、Spring ベースの Web アプリケーションであるJasig CAS サーバー(v. 4.2) を使用しようとしています。

残念ながら、Jasig CAS サーバーは、ログインに成功した後のリダイレクトにサービス ID しか使用できません。CAS サーバーはリバース プロキシの背後にあり、DNS を使用していないため、受け入れられません。したがって、ログイン URL は次のようになります。

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

どこ

  • abcd - 外部 (プロキシ) IP アドレス
  • xxxx - 内部 (サービス / CAS クライアント) IP アドレス

Jasig のドキュメントを読みましたが、サービス URL を難読化する方法が見つかりませんでした。今のところ、カスタム ロジックを実装しようとしています。別のパラメーターとしてリダイレクト URL を渡したい:

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

.. サービス ID の代わりにこのパラメータをリダイレクトに使用します。

doc Jasig CAS によると、Spring Webflow を使用してログイン シナリオ ( login-webflow.xml ) を実装します。そして、それがリダイレクトが発生した場所です:

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

私はSpring Weblowに慣れていないので、質問は次のとおりです。

「リダイレクト」URL パラメータを受け取り、デコードしてリダイレクトに使用するにはどうすればよいですか?

PS下手な英語で申し訳ありませんが、少なくとも解析可能であることを願っています:-)

4

1 に答える 1

2

わかりました、それは非常に簡単でした。興味のある方へ:

org.jasig.cas.*パッケージの下にカスタム サービス Bean を作成します。

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}"/>
于 2016-04-12T08:54:31.760 に答える