我们有一个J2EE Web应用程序使用Spring MVC。我们对Web应用程序有了新的要求,我们必须从用户输入中删除某些预定义的字符。例如,假设应用程序应删除'<'来自所有用户输入。我提出了两种方法来满足这一要求:
JSP级别:识别允许用户输入的每个jsp,然后通过客户端处理删除字符。
Servlet过滤器:使用过滤器拦截请求对象。在这里,我可以使用以下两种方法中的一种:
2.1:覆盖request.getParameter方法并在其中写入字符删除逻辑。每当调用此方法时,它将返回过滤后的结果。
2.2:在过滤级别,扫描参数图并过滤所需的字符。然后编写一个setParameter方法并在请求参数映射中设置新值。
您建议使用哪种方法?过滤器会对性能产生任何影响吗?如果您能想出更好的方法,请告诉我。
答案 0 :(得分:2)
如果您愿意,可以进行客户端过滤,但绝对不应该依赖它。客户端可以关闭Javascript。他们也可以发布他们喜欢的内容。客户端验证是一种便利。它不能替代服务器端验证。
至于使用servlet过滤器,我不确定我是一个忠实的粉丝。看起来(我可能在这里错了)你试图保护自己免受懒惰,健忘或只是普通的无能的开发人员。
此外,如果您在任何时候允许使用HTML(就像此网站一样),那么您就不能将这种事情作为一种普遍规则。在你进行所有其他验证的地方应该处理这类事情。如果您真的担心它,可以对它进行单元测试。
Servlet过滤器似乎很重要,可能会出现问题。
你正在使用Spring MVC。您是否正在使用Spring验证器背后的任何特定验证框架?无论如何,恕我直言,这是处理这类问题的正确场所,并且易于单元测试[原文如此]。
我认为这是对这类事情的正确观点。
所有这些,我没有看到任何技术上的原因,如果你真的倾向于这种方法,为什么你不能在servlet过滤器中使用setParameter。我肯定会在servlet请求上重写setParameter。你能做到吗?即使你能,我也不会。
答案 1 :(得分:1)
我会把问题转向脸。用户输入的字符是<进入这些领域,或者当你再次在网页上打印它们时你没有逃脱它们?
答案 2 :(得分:0)
我建议您使用正则表达式。
至于放在哪里,听起来像是业务逻辑,所以servlet过滤器或jsp级别听起来不是一个好主意。
是的,这会影响性能,但不会引起注意或严重。
答案 3 :(得分:0)
我刚刚阅读了另一篇可能有助于使用Servlet过滤器的StackOverflow帖子:
Modify Request Parameter with Servlet Filter
使用servlet过滤器似乎是合理的,如果你可以使一个通用的足以根据需要清理数据。