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

Struts2技术实现:将URL中的Action名称替换为别名

嘿,这个需求在Struts2里实现起来很直接,核心就是利用框架的Action别名映射机制,完全可以把晦涩的真实Action名称替换成友好的别名,下面给你两种实用的方案:

方案1:直接配置单个Action别名

这是最直观的方式,直接在struts.xml里为你的真实Action指定别名。比如你的真实Action类是BillingPayment_Action,想要对外暴露的别名是PleasePayyourBill,配置如下:

<struts>
    <!-- 对应你的TestPackage命名空间 -->
    <package name="TestPackage" namespace="/TestPackage" extends="struts-default">
        <!-- 别名Action配置:name是对外展示的URL路径,class指向真实的Action类全限定名 -->
        <action name="PleasePayyourBill" class="com.yourproject.TestPackage.BillingPayment_Action">
            <!-- 保留原Action的result跳转配置,和原来完全一致 -->
            <result name="success">/pages/paymentSuccess.jsp</result>
            <result name="error">/pages/paymentError.jsp</result>
        </action>
    </package>
</struts>

配置完成后,用户访问www.Test.com/TestPackage/PleasePayyourBill时,Struts2会自动调度到BillingPayment_Action执行逻辑,真实Action名称完全不会暴露在URL里。

方案2:批量禁用真实Action路径(增强安全性)

为了彻底防止用户猜测到真实Action名称,你可以额外配置全局规则,禁止直接访问所有带_Action后缀的路径。在struts.xml里添加以下常量配置:

<struts>
    <!-- 禁止访问所有以_Action结尾的Action路径 -->
    <constant name="struts.action.excludePattern" value="/TestPackage/*_Action"/>
    
    <!-- 上面的别名配置依然保留 -->
    <package name="TestPackage" namespace="/TestPackage" extends="struts-default">
        <action name="PleasePayyourBill" class="com.yourproject.TestPackage.BillingPayment_Action">
            <result name="success">/pages/paymentSuccess.jsp</result>
            <result name="error">/pages/paymentError.jsp</result>
        </action>
    </package>
</struts>

这样一来,如果有人尝试直接访问www.Test.com/TestPackage/BillingPayment_Action,会被框架拦截,返回404或者自定义错误页面,进一步保障了后端Action的隐蔽性。

注意事项
  • 确保class属性填写的是真实Action类的全限定名(包名+类名),不然框架找不到对应的Action类
  • 如果有多个Action需要别名,重复方案1的配置即可,每个别名对应一个真实Action
  • 测试时记得重启Web应用,让配置生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:37:13