禁用Struts操作调用

时间:2015-05-21 09:27:09

标签: struts2 struts-config

有没有办法配置是否可以调用struts动作?
例如,我有以下类:

public class MyAction {
  public String myMethod() {
    // logic
  }
}

struts.xml文件:

<action class="MyAction" method="myMethod"/>

我可以在此文件中添加一个配置,让我禁用此操作的调用,例如:

<action class="MyAction" method="myMethod">
  <param name="disable">true</param>
</action>

这种情况的用例可能是我想在开发模式下禁用动作的执行,即我有一个动作,我使用AJAX从客户端调用它。调用操作可确保我的应用程序的重要功能。此功能对于应用程序正常运行是必需的。但是,此功能可能是开发模式的负担,因此禁用它(仅在此模式下)将非常有用。

解决此问题的一种方法是使用拦截器机制(如评论中所示)。但是,这可以在配置级别完成吗?

1 个答案:

答案 0 :(得分:1)

有多种方法可以实现这一目标。我将列出其中的几个。

  1. 创建并在您的开发配置中添加一个自定义拦截器,它将根据某个黑名单检查当前操作名称,如果在此列表中,将跳过操作执行。 (您可以将动作名称黑名单放入某些属性文件中。)

  2. myMethod文件中method属性中的struts.xml更改为您操作中的某个方法,该方法返回NONE结果。通过这种方式,您可以在构建生产时轻松替换它,手动或使用您喜欢的构建工具进行替换。

  3. 您还可以为您的开发环境创建单独的struts.xml文件,并将其交换为生产版本。

  4. 假设在您的开发环境struts.devMode常量设置为true,您可以将其注入您的操作类并在方法中使用它来检查是否应该执行

     
    private boolean devMode;
    
    @Inject(StrutsConstants.STRUTS_DEVMODE)
    public void setDevMode(String mode) {
        devMode = Boolean.valueOf(mode);
    }
    
    public String myMethod() {
        if(devMode) {
            return NONE;
        }
        // ...
        return SUCCESS;
    }