java - Struts 1 - 在操作类而不是表单中进行验证是否存在任何问题?

标签 java validation security struts-1

我支持一个 struts1 应用程序,我正在尝试使其通过 Fortify 扫描。除此之外,我认为struts1应用程序中的所有代码都应该位于action类(或action类调用的Java类)中。 JSP 中不应包含 JDBC 代码,也不应在 JSP 中使用 bean。这是正确的吗?

尝试将所有数据访问代码保留在操作类中并在 Struts1 操作表单中进行输入验证会产生问题。问题是,如果发生验证错误,则不会再次执行使用现有值在编辑屏幕上预填充字段的代码。因此,当发生验证错误时,所有文本框都会变为空白。用户会看到错误消息,告诉他们做错了什么,但所有现有的预填充值都消失了。

如果您在操作类而不是操作表单中进行验证(将操作表单中的 validate() 方法设置为空),那么您可以让操作类再次执行并保留预填充的值。只要不产生任何后果,我不介意这样做。我的问题是,可以像这样在操作类中而不是操作表单中进行验证吗?你有什么理由不应该这样做吗?

谢谢。

最佳答案

You should not have JDBC code in a JSP or a bean used in a JSP. Is that correct?

JSP 仅是 View 层; JSP 中当然“不应该”有任何 JDBC 访问。 JSP 使用的 bean 是一种完全不同的动物,尤其是在 S1 中,其中 ActionForm 用于多个关注点。

Trying to keep all data access code in the action class and doing input validation in the Struts1 action form creates a problem.

不应该;这就是 ActionForm#validate 的作用——验证。如果这意味着进行数据访问,则不会破坏 S1 约定(尽管我会将其外部化为数据访问类)。如果表单字段被发送回空白,则说明实现存在问题。

在框架中,最好在其约定范围内工作。您可以在任何您想要的地方进行验证 - 您不应该的一个原因是它与正常的 S1 应用程序流程相反。

关于java - Struts 1 - 在操作类而不是表单中进行验证是否存在任何问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61481889/

相关文章:

java - 将列表中的单个字符串按字母顺序排列 - Java

javascript - 需要只允许有效页码的正则表达式,例如 1、2、3、4-5,每个页码的最大长度为 3 位数字 (1-999)

Symfony 使用映射的虚假表单字段验证表单

java - 是否可以将 Spring Security 的 AOP 与 Java Security Manager 合并?

django - 在网站中传递商家 key 和盐

java - 使用 Morphia Java 在每次更新时更新 mongo 中的 updated_at 属性

java - Struts 忽略验证方法

java - map 比较不会产生正确的结果

Javascript 文本字段验证 ||资金投入

swift - 如何从 SecCertificate 中提取或比较 kSecPropertyKeyValue