java - Struts2 + spring Autowiring 操作的名称而不暴露某些属性

标签 java spring struts2

我正在使用 Struts 2 和 Spring Autowiring 。目前,默认策略设置为按名称,但通常我们使用构造函数,并且当只有一个实现类可用时,后备工作会在属性中 Autowiring 。

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

所以我的问题是,实际上是否可以使用按名称 Autowiring 而不暴露这样的属性(这可能会或可能不会构成安全隐患),或者我最好只使用 XML 并将 Action 定义为对象有范围原型(prototype)吗?

最佳答案

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

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

最后,在正常的 Spring 配置中将操作定义为原型(prototype)对象似乎是最谨慎的。让操作管理其拥有的参数意味着每次进行更改时都需要将参数显式列入白名单。

关于java - Struts2 + spring Autowiring 操作的名称而不暴露某些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9683101/

相关文章:

java - Spring MVC 3 JSF 2 与 Maven

java - 不同的 ascii 表代码值?

java - 移动或删除类后使用 SpringJUnit4ClassRunner 运行 junit 测试时出现初始化错误

spring - 即使包含 Jar,Tomcat 上的 Maven Java App NoClassDefFoundError

java - 定制 Controller

java - 浏览器关闭并在struts2中重新打开后保持相同的 session

java - 下载文件时获取附加文件内容的j​​sp源代码

java - 如何将 Java Spring logger.info 消息发送回 Angular 进行显示

java - 日志记录在 Android 设备上的实际作用是什么?

java - 如何自动创建 Multi-Tenancy 架构?