2012-03-13 55 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