我需要在基于Java的Web应用程序中过滤掉用户提交内容中的亵渎行为。客户知道斯肯索普问题和克洛提克问题,并已接受后果。拜托,我不想就缺乏审查制度的优点进行辩论。
有两个数据位:
- 用户提交的内容,可能包含500个字左右;
- 单列数据库表,其中包含不允许的单词。该表中可能有成千上万的记录。
目前的解决方案对我来说似乎是错误的:
- 整个表在启动时装入到Singleton中的静态String []中(因此驻留在内存中)。
- 对于每个用户提交,我们遍历数组并执行.indexOf()以查看String []中是否有任何给定单词出现在提交中。
- 如果出现,我们将替换为%$#@%样式的字符。这是通过以下方式完成的:标记用户提交的内容,再次将整个用户提交作为标记循环,并替换找到的单词的每个实例。
此解决方案可能会有出色之处,但我对此表示怀疑。看了一会儿,我找不到路。
问题是,有什么解决方案能够提供良好的性能,并希望在我因未能过滤掉一些我从未听说过的晦涩词汇而被解雇后,对未来的开发人员保持理智的态度?