2016-04-11 11 views
1

私はWebサービスでCAS認証を統合しようとしており、SpringベースのWebアプリケーションであるJasig CAS server(v。4.2)を使用しています。Jasig CAS - ログイン後にユーザーをリダイレクトするWebFlowのカスタマイズ方法

残念ながら、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を難読化する方法は見つけられませんでした。 今のところ私はカスタムロジックを実装しようとしています。 ..

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

を、代わりにサービスIDのリダイレクトのため、このPARAMを使用します。私は、別のparamとしてリダイレクトURLを渡したいです。

docによると、Jasig CASはSpring Webflowを使用してログインシナリオ(login-webflow.xml)を実装しています。 そして、それは、リダイレクトが発生する場所です:私は春Weblowに精通していないよので、質問がある

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

どのように私は、「リダイレクト」を受信できるURLのPARAM、デコードおよびそれを使用しますリダイレクトのために?

P.私の悪い英語のために申し訳ありません、私はそれが少なくともparseableです:-)

答えて

1

[OK]を、それは非常に簡単だった。興味がある人々のために:

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

修正ログイン-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}"/> 
関連する問題