2016-04-11 120 views
1

我正在尝试在我们的Web服务中集成CAS认证,并使用基于Spring的webapp的Jasig CAS server(v.4.2)。Jasig CAS - 如何在登录成功后自定义WebFlow重定向用户?

不幸的是,Jasig CAS服务器在成功登录后只能使用服务ID进行重定向。 这是不可接受的,因为CAS服务器位于反向代理之后,我们不'使用DNS。 所以,登录网址看起来像:

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作为单独的PARAM:

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 PARAM,解码和使用重定向?

P.S.对不起,我的英文不好,我希望它至少可以解析:-)

回答

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

修改登录-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}"/>