【问题标题】:Struts2 + spring autowiring actions by-name without exposing certain propertiesStruts2 + spring 按名称自动装配动作而不暴露某些属性
【发布时间】:2012-03-29 19:10:23
【问题描述】:

我正在使用 Struts 2 和 Spring 自动装配。目前,默认策略设置为按名称,但通常我们使用构造函数,当只有一个实现类可用时,回退可以自动装配属性。

但是,我想将一个属性连接到一个具有多个实现类的操作类中,因此我将操作设置为一个 java bean,并将属性作为可以设置的字段。不幸的是,使用这些的唯一方法(显然)是如果它们有一个公共的 getter/setter,这也会在请求时将它们暴露给类型转换器。换句话说,如果客户端将其名称作为表单字段或参数添加到请求中,Struts 将尝试将这些值写入它们。

所以我的问题是,实际上是否可以在不暴露类似属性的情况下使用按名称自动装配(这可能是也可能不是安全隐患),或者我最好只使用 XML 并将 Action 定义为对象范围原型?

【问题讨论】:

  • 我不知道你说的type converter at request time是什么意思
  • @UmeshAwasthi 我试图进一步澄清这一点。
  • 您可以轻松告诉 S2 参数拦截器排除在您的操作类中设置的某些参数

标签: java spring struts2


【解决方案1】:

我最终找到了ParametersInterceptor 的文档,其中实际上列出了三种限制拦截器设置参数的方法。

  • 在参数配置中配置excludeParams,这是一个适用于所有操作的全局正则表达式(不是我想要的,也可能已弃用,因为它在最新的类文档中不再描述)。
  • 设置excludeMethods(同上,全局排除的首选方法)
  • 实现ParameterNameAware,这是最接近我想要的。您可以在此处将使用的参数列入白名单。

最后,在正常的 Spring 配置中将动作定义为原型对象似乎是最谨慎的。让操作管理它所拥有的参数意味着在另一个地方,每次进行更改时都需要明确地将参数列入白名单。

【讨论】:

  • 我不确定你在做什么......但你可以注入受保护和私人成员。这是一个简短的示例:struts2.myxwiki.org/xwiki/bin/view/Struts2/… 在这种情况下,Test 是受保护的成员。
  • @Quaternion 我没有使用基于注释的配置。当我尝试仅依赖自动自动装配时,它只会在它们公开时注入它们。如果你使用你的方法,它是否正确地确定了行动的范围?
猜你喜欢
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 2011-02-22
  • 2014-09-29
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多