如何从 J2EE Web 应用程序中的用户输入中删除预定义字符?
Posted
技术标签:
【中文标题】如何从 J2EE Web 应用程序中的用户输入中删除预定义字符?【英文标题】:How to remove pre-defined characters from user input in a J2EE web application? 【发布时间】:2010-10-14 20:53:54 【问题描述】:我们有一个使用 Spring MVC 的 J2EE Web 应用程序。我们对 Web 应用程序有一个新要求,我们必须从用户输入中删除某些预定义字符。例如,假设应用程序应该从所有用户输入中删除“
JSP 级别:识别每个允许用户输入的 jsp,然后通过客户端处理删除字符。
Servlet 过滤器:使用过滤器并拦截请求对象。在这里,我可以使用以下两种方法中的一种:
2.1 : 重写 request.getParameter 方法并在其中编写字符删除逻辑。每当调用此方法时,都会返回过滤后的结果。
2.2 : 在过滤级别,扫描参数映射,过滤需要的字符。然后编写一个 setParameter 方法,并在请求参数映射中设置新值。
您建议采用哪种方法?过滤器对性能有影响吗?如果您能想到更好的方法,请告诉我。
【问题讨论】:
出于好奇,您是从安全的角度出发吗? 【参考方案1】:我刚刚阅读了另一篇 *** 帖子,它可能对使用 Servlet 过滤器有所帮助:
Modify Request Parameter with Servlet Filter
如果您可以使一个足够通用的过滤器来根据您的需要清理数据,那么使用 servlet 过滤器似乎是合理的。
【讨论】:
【参考方案2】:我会把问题转到面子上。问题是用户在字段中输入
【讨论】:
用户可以输入字符。客户不想将它们存储在数据库中。他们也不想显示任何警报或消息来通知用户不要输入此类字符。【参考方案3】:您可以根据需要进行客户端过滤,但绝对不应该依赖它。客户端可以关闭 javascript。他们也可以发布他们喜欢的内容。客户端验证很方便。它不能替代服务器端验证。
至于使用 servlet 过滤器,我不确定我是否是它的忠实拥护者。看起来(我在这里可能是错的)你试图保护自己免受懒惰、健忘或只是无能的开发人员的伤害。
此外,如果您在任何时候都允许使用 html(如本网站所做的那样),那么您就不能将这种事情作为通用规则。这种事情应该在你进行所有其他验证的地方处理。如果您真的担心它,请围绕它进行单元测试。
Servlet 过滤器看起来很笨拙,并且可能对此有问题。
您正在使用 Spring MVC。您是否在 Spring 的验证器后面使用任何特定的验证框架?无论如何,恕我直言,这是处理此类问题且易于单元测试的正确位置 [原文如此]。
我认为这是做这类事情的正确点。
话虽如此,我看不出任何技术原因,如果您真的倾向于这种方法,那么您不能在 servlet 过滤器中使用 setParameter 执行此操作。我当然会在 servlet 请求上覆盖 setParameter 。你能做到吗?即使你能,我也不会。
【讨论】:
我们使用的是 Spring MVC 框架。我也将它添加到问题中。谢谢。【参考方案4】:我建议你为此使用正则表达式。
至于放在哪里,听起来像是业务逻辑,所以servlet过滤器或jsp级别听起来不是一个好主意。
是的,它会影响性能,但不会引起注意或严重。
【讨论】:
以上是关于如何从 J2EE Web 应用程序中的用户输入中删除预定义字符?的主要内容,如果未能解决你的问题,请参考以下文章