You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何扩展ForgeRock AM的AbstractDecisionNode添加'redirect'结果?

ForgeRock AM AbstractDecisionNode 添加'redirect'结果实现方案

一、定义节点结果枚举

先扩展节点的结果枚举,把redirect纳入合法结果,确保AM能识别并处理这个结果分支:

public enum CustomCollectorNodeOutcome {
    SUCCESS,
    FAILURE,
    REDIRECT;

    @Override
    public String toString() {
        return name().toLowerCase();
    }
}

二、实现自定义收集器节点

继承AbstractDecisionNode,在元数据中声明新增的redirect结果,同时在业务逻辑里判断用户操作,返回对应结果:

import org.forgerock.openam.auth.node.api.AbstractDecisionNode;
import org.forgerock.openam.auth.node.api.Action;
import org.forgerock.openam.auth.node.api.NodeProcessException;
import org.forgerock.openam.auth.node.api.TreeContext;
import org.forgerock.util.i18n.PreferredLocales;

import javax.inject.Inject;
import java.util.Map;

public class CustomCollectorNode extends AbstractDecisionNode<CustomCollectorNodeOutcome> {

    @Inject
    public CustomCollectorNode() {
        super(CustomCollectorNodeOutcome.class);
    }

    @Override
    public Action process(TreeContext context) throws NodeProcessException {
        Map<String, String[]> formParams = context.request.parameters;
        
        // 判断用户是否点击了触发重定向的按钮(假设按钮name为"triggerRedirect")
        if (formParams.containsKey("triggerRedirect")) {
            // 从节点配置或共享状态中获取目标跳转URL
            String targetUrl = "https://your-domain.com/logout";
            // 返回REDIRECT结果并附加重定向指令
            return Action.redirectTo(targetUrl).build();
        }
        
        // 处理常规提交逻辑
        if (formParams.containsKey("submit")) {
            // 验证通过返回SUCCESS
            return Action.goTo(CustomCollectorNodeOutcome.SUCCESS).build();
        } else {
            // 验证失败返回FAILURE
            return Action.goTo(CustomCollectorNodeOutcome.FAILURE).build();
        }
    }

    @Override
    public String getDisplayName(PreferredLocales locales) {
        return "带重定向功能的收集器节点";
    }

    @Override
    public String getDescription(PreferredLocales locales) {
        return "支持触发重定向/注销操作的收集器节点,点击指定按钮返回redirect结果";
    }
}

三、收集器前端配置

在收集器的表单中添加触发重定向的按钮,确保点击时提交对应参数:

<form method="post" action="${authServiceUrl}">
    <!-- 业务收集字段 -->
    <input type="text" name="phoneNumber" placeholder="请输入手机号">
    
    <!-- 常规提交按钮 -->
    <button type="submit" name="submit">确认提交</button>
    
    <!-- 触发重定向的按钮 -->
    <button type="submit" name="triggerRedirect">注销并返回首页</button>
    
    <!-- AM自动生成的必要隐藏字段 -->
    <input type="hidden" name="realm" value="${realm}">
    <input type="hidden" name="authIndexType" value="service">
    <input type="hidden" name="authIndexValue" value="${treeName}">
</form>

四、认证树流程配置

在AM控制台的认证树中添加该节点后:

  • 将redirect结果分支直接指向终止节点,或利用Action.redirectTo()完成跳转无需后续节点
  • 确保节点权限配置正确,允许触发重定向操作

内容的提问来源于stack exchange,提问作者NickH48226

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:22:22