2012-03-13 54 views
1

我正在使用Struts 2和Spring自动装配。现在,默认策略设置为by-name,但通常我们使用构造函数,并且只有一个实现类可用时,回退才会在属性中自动装入。Struts2 + spring autowiring action by-name没有暴露某些属性

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

所以我的问题是,实际上是否可以使用名义自动装配而不暴露这样的属性(这可能或可能不是安全隐患),还是我最好使用XML并将Action定义为带范围原型的对象?

+0

我不确定你在'请求时间'类型转换器是什么意思 – 2012-03-13 11:50:32

+0

@ UmeshAwasthi我试图进一步澄清。 – wds 2012-03-13 12:37:35

+0

你可以很容易地告诉S2 param拦截器排除你的动作类中设置的某些参数 – 2012-03-13 13:09:37

回答

0

我确实最终追踪了ParametersInterceptor的文档,它实际上列出了三种限制拦截器设置参数的方法。

  • 在参数配置,这是一个全球性的正则表达式,适用于所有的动作(不是我想要的,因为它是在最近的类文档不再叙述也可能不建议使用)配置excludeParams
  • 设置excludeMethods(与以前相同,全球排除的首选方法)
  • 实施ParameterNameAware,这是最接近我想要的。在这里您可以将使用的参数列入白名单。

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

+0

我不知道你在做什么......但你可以注入受保护的和私人成员。这里是一个简短的例子:http://struts2.myxwiki.org/xwiki/bin/view/Struts2/Adding+Spring+Dependancy+Injection+to+Struts2+Project在这种情况下,Test是一个受保护的成员。 – Quaternion 2012-03-13 17:43:51

+0

@Quaternion我没有使用基于注解的配置。当我试图依靠自动自动装配时,它只会在公开时注入它们。如果你使用你的方法,它的行为是否适当? – wds 2012-03-15 08:54:51