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

如何在Struts 1中实现URL重定向跳转至外部登录页

Struts 1 实现外部站点重定向方案

以下为对应Struts2实现逻辑的Struts1等效实现方案,分为配置与代码两部分:

1. struts-config.xml 配置(对应Struts2的struts.xml配置)

Struts1的核心路由配置文件为struts-config.xml,对应原Struts2的Action映射配置示例如下:

<action path="/Home2"
        type="com.eppt.action.MasterAccountListAction"
        <!-- 若使用DispatchAction实现单Action多方法,需加parameter配置指定方法参数名 -->
        parameter="method"
        name="masterAccountForm"
        scope="request">
    <!-- 对应原Struts2中unknownerror的Tiles结果,保持项目原有Tiles集成配置即可 -->
    <forward name="unknownerror" path="masteraccountlist" />
    <!-- 预定义重定向逻辑视图,路径后续在业务代码中动态赋值 -->
    <forward name="wlgn" path="" redirect="true" />
    <forward name="success" path="" redirect="true" />
</action>

2. Action业务逻辑实现(对应Struts2的wlgnReDirect方法)

Struts1的Action执行完成后返回ActionForward对象完成视图路由,不需要像Struts2那样返回字符串视图名,动态重定向的代码如下:

普通单方法Action写法

public class MasterAccountListAction extends Action {
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request, HttpServletResponse response) {
        try {
            // 对应原逻辑的重定向地址赋值
            String wlgntUrl = "https://wwwdev.idev.com/secure-login/en-us/?redirectUrl=http://www.yahoo.com";
            String nextScreen = "wlgn";

            // 从配置中拿到对应视图的Forward对象,动态设置重定向地址
            ActionForward redirectForward = mapping.findForward(nextScreen);
            redirectForward.setPath(wlgntUrl);
            redirectForward.setRedirect(true);
            return redirectForward;
        } catch (Exception e) {
            // 对应原逻辑的异常处理
            addGenericError(request);
            return mapping.findForward("unknownerror");
        }
    }

    // 保留项目原有通用错误处理方法即可
    private void addGenericError(HttpServletRequest request) {
        // 原有错误处理逻辑
    }
}

DispatchAction多方法写法

如果项目用DispatchAction实现和Struts2类似的单Action多方法映射,直接定义对应方法即可:

public class MasterAccountListAction extends DispatchAction {
    public ActionForward wlgnReDirect(ActionMapping mapping, ActionForm form,
                                      HttpServletRequest request, HttpServletResponse response) {
        try {
            String wlgntUrl = "https://wwwdev.idev.com/secure-login/en-us/?redirectUrl=http://www.yahoo.com";
            ActionForward redirectForward = mapping.findForward("wlgn");
            redirectForward.setPath(wlgntUrl);
            redirectForward.setRedirect(true);
            return redirectForward;
        } catch (Exception e) {
            addGenericError(request);
            return mapping.findForward("unknownerror");
        }
    }

    private void addGenericError(HttpServletRequest request) {
        // 原有错误处理逻辑
    }
}

实现说明

  • 以上实现的跳转行为和Struts2的redirect结果类型完全一致:属于客户端302重定向,跳转后浏览器地址栏会显示外部登录页地址,不会将站内request属性传递到外部站点,符合跨站跳转的安全要求。
  • Tiles视图配置不需要额外修改,只要保持项目原有Struts1+Tiles的集成规则,unknownerror视图能正常路由到masteraccountlist页面即可。
  • 如果不想在配置文件中预定义空路径的重定向forward,可以直接在代码中构造重定向结果,写法更简洁,效果完全一致:
    // 第二个参数传true即代表使用客户端重定向模式
    return new ActionForward(wlgntUrl, true);
    
  • 如果重定向地址需要动态拼接参数,直接在赋值给wlgntUrl前完成拼接即可,Struts1会自动处理重定向响应头的标准格式输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:42:29