当前位置: 首页 > 面试题库 >

在验证程序扩展中使用StringUtils的Struts 2

子车新立
2023-03-14
问题内容

我们正在使用Struts 2验证器@FieldExpressionValidator和@ExpressionValidator。这些验证器检查OGNL表达式。在很多情况下,我们在这些表达式中处理字符串。

expression="(captcha=='' && captcha== null || ....)

如果在这里使用StringUtils(isEmpty,trimToEmpty,…),我们发现它非常有用。

当我们将struts.ognl.allowStaticMethodAccessfalse设置 为false时,出于安全问题,我们尝试通过将此getter添加到操作中来解决该问题

public StringUtils getStringUtils(){
        return new StringUtils();
    }

然后stringUtils.isEmpty(captcha)在表达式中 但这没有用。

为了调试我们测试了

ActionContext.getContext().getValueStack().findValue("stringUtils"); //returns org.apache.commons.lang3.StringUtils@693ade51 which shows there is an object in the stack

ActionContext.getContext().getValueStack().findValue("stringUtils.isEmpty('dd')"); //returns null

任何意见 ?!


问题答案:

isEmpty是一个静态方法,应使用类前缀静态访问。一旦使用OGNL,就必须允许静态方法访问或为该方法编写包装,即

public boolean stringUtilsIsEmpty(String captcha) {
    return StringUtils.isEmpty(captcha);
}

然后

ActionContext.getContext().getValueStack().findValue("stringUtilsIsEmpty('dd')");

但是,在JSP中,您可以执行

<s:if test="captcha != null && captcha != ''">
  do something
</s:if>

这样做就像StringUtils#isEmpty()



 类似资料:
  • 扩展说明 参数验证扩展点。 扩展接口 org.apache.dubbo.validation.Validation 扩展配置 <dubbo:service validation="xxx,yyy" /> <!-- 缺省值设置,当<dubbo:service>没有配置validation属性时,使用此配置 --> <dubbo:provider validation="xxx,yyy" /> 已知

  • 问题内容: 我正在尝试在扩展弹出窗口中使用Google开发人员AngularJS库,但出现错误。 错误:在k(chrome-extension:// jambnlbfljcfpomlclcgphfmkjfiphkb / lib / lib)的功能(未知源)处,Jb(chrome- extension://jambnlbfljcfpomlclcgphfmkjfiphkb/lib/angular.js

  • 问题内容: 后来的AngularJS(1.3 beta 19)使用。铬萃取中禁止这样做。 如何在 不允许评估的情况下 解决问题? 错误信息: 拒绝将字符串评估为JavaScript,因为在以下内容安全策略指令:“ script-src’self’chrome-extension- resource:”中不允许使用’unsafe-eval’作为脚本源。 堆栈跟踪: 更新:请参阅https://doc

  • 我正在做一个项目,该项目将有许多JavaFX应用程序,这些应用程序具有相似但又足够不同的功能,因此我创建了一个抽象基类来扩展Application以处理常见的功能并指示它们需要做什么,还创建了一系列具体的类来扩展这些功能。然而,当我试图跑的时候,我得到 应用程序构造函数java.lang.Reflect.InvocationTargetException位于java.base/jdk.intern

  • 问题内容: 我有一个用Swift编写的应用程序(简称MyApp),其目标如下: :主要目标 :一个目标,用于为应用及其扩展程序(主要是API后端和数据库处理)之间共享的代码构建框架 :使用框架的Today View小部件(或现在称为的小部件)。 该框架链接到使用它的每个目标,即和。输入Cocoapods:我以前具有以下Podfile结构: 这里的目的是仅将框架公开给其他部分,而不是将其所有pod

  • Flarum 是简约的,同时也是高度可扩展的。实际上,Flarum 附带的大部分功能都是扩展程序。 这种方法使得 Flarum 具有极高的可定制性。您可以禁用任何您不需要的功能,并安装其他扩展,打造更适合您的社区。 如果您想了解更多关于 Flarum 的理念,我们在核心中包含了哪些功能,或者您想制作自己的扩展,请查看我们的 扩展文档。 本文将重点讨论从论坛管理员的角度管理扩展。 Flarum 有一