spring-webflow - Jasig CAS - 如何自定义WebFlow以在成功登录后重定向用户?

标签 spring-webflow cas jasig spring-security-cas

我正在尝试将 CAS 身份验证集成到我们的 Web 服务中并使用 Jasig CAS server (v. 4.2) 这是基于 Spring 的 web 应用程序。

不幸的是,Jasig CAS服务器只能在成功登录后使用服务ID进行重定向。 这是 Not Acceptable ,因为 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 的方法。 现在我正在尝试实现自定义逻辑。我想将重定向网址作为单独的参数传递:

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

..并使用此参数进行重定向而不是服务 ID。

根据文档 Jasig CAS 使用 Spring Webflow 实现登录场景 ( login-webflow.xml )。 这就是导致重定向的地方:

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

由于我不熟悉 Spring Weblow,问题是:

我如何接收“重定向”URL 参数、解码并将其用于重定向?

附注抱歉我的英语不好,我希望它至少是可以解析的:-)

最佳答案

好吧,这很简单。对于任何感兴趣的人:

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}"/>

关于spring-webflow - Jasig CAS - 如何自定义WebFlow以在成功登录后重定向用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36546889/

相关文章:

cas - 用于测试客户端代码的公共(public) CAS 服务器

java - 覆盖 Apereo CAS 5 时没有 web.xml

rest - 访问 CAS REST API 的工作 Java REST 客户端示例

web-services - Web 服务 SSO jasig CAS

spring - 注入(inject) Autowiring 依赖项失败嵌套异常

java - Spring WebFlow validator 的配置问题

java - Spring 会结合 MVC 和 WebFlow 吗?

authentication - CAS 认证 Symfony2

java - 从 flow.xml 打印日志

grails - Webflow的操作状态能否在成功后具有多个重定向?