【问题标题】:How to exclude some properties of ModelDriven Action from being updated in Struts 2如何在 Struts 2 中排除 ModelDriven Action 的某些属性被更新
【发布时间】:2021-04-02 04:39:27
【问题描述】:

我们正在使用带有ModelDriven 接口的操作。该操作具有scopedModelDriven interceptor,我们将模型保存在会话中。

型号如下:

public class Fundtransfer{

private String amount;
private String sourceAccount;
private String destinationAccount;
private String sign

//setter's and getter's ommited
}

Fundtransfer bean 用作模型。 JSP 表单有数量、sourceAcountdestinationAcount 字段,它们通过modelDriven 拦截器自动映射到Fundtransfer bean。 一切正常,直到听到!

当然,用户可以简单地遍历 HTML 表单并将名为 sign 的变量传递给操作,拦截器会将其更新为 bean。

我们是否可以配置一个模型,使其符号值无法通过ModelDriven拦截器更新。

我知道我可以创建一个新 bean,然后将其复制到 Fundtransfer bean 或使用某种继承。有没有更好的方法。

我们使用的真正的 bean 很大,而且有些还有嵌套的 bean。

我想也许我可以使用一些方面的技巧,但我不知道这是否可能?

【问题讨论】:

  • 您应该公开不应通过设置器设置的值。这通常非常危险。

标签: java jsp struts2 aspectj aop


【解决方案1】:

ModelDriven bean 通常用于通过 getter/setter 进行读/写。您可以在此处控制访问。但是,如果您还不知道 Struts2 通过使用 OGNL 填充模型的params interceptor 设置参数。例如,您可以通过参数excludeParams 控制此拦截器

<interceptor-ref name="params">
  <param name="excludeParams">
    dojo\..*,^struts\..*,sign
  </param>
</interceptor-ref>

另一种方法是使用ParameterNameAware,您可以在其中实现参数的黑白列表。小心这种方法可以通过第一种方法打开限制参数的大门。

【讨论】:

  • 谢谢。你的意思是即使我使用 ParameterNameAware,我的应用程序中还有一扇敞开的门?!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 2013-02-05
  • 1970-01-01
  • 2017-03-23
相关资源
最近更新 更多