flex + java 过滤敏感词

      过滤敏感词这个相对比较容易做到,网上也很多方法,看得比较多的一个方法就是:把所有的敏感词写入到一个properties文件中,程序启动时拼成一个正则表达式。这个也只是比较基础的敏感词过滤器,比较强大的过滤器是连如:“陈@@@水@@@扁”这样的词都能过滤掉,QQ聊天的过滤好像就做到了这样。

      对于web程序,如果发现敏感词不让通过并且导向另外的提示页面,这个则可以用一般的过滤器filter来做。但是如果需要继续执行原先的意图,并把敏感词用***替换,这时似乎不能使用filter来执行。因为没有request.setParameter()这个方法吧...最简单的方法,就是在执行数据库操作时先过滤掉敏感词,问题是需要在每个处理请求的地方写那段过滤代码吧。。。

      对于一般的j2ee系统来说,我没想那么多,或许可以使用aop来做,有空得研究一下。不过对于flex 结合 j2ee的web系统则相对可以简单点,废话一下,flex与java的结合使用blazeds框架。这种系统一般都是把java方法暴露给flex直接调用。原理应该类似于js框架dwr。他们的原理姑且认为都是通过反射来执行java方法,这好办了,只要在Method.invoke()之前修改一下那些可能带有敏感词的参数就可以了。发现Blazeds框架提供了一个JavaAdapter类,这个类应该是flex与java之间的适配器。同时需要配置在remoting-config.xml文件中。这是我们可以去继承JavaAdapter类。如下:

 public class MyDcsJavaAdapter extends JavaAdapter { public Object invoke(Message message) { RemotingMessage remotingMessage = (RemotingMessage)message; List parameters = remotingMessage.getParameters(); //开始实施过滤 int size = parameters.size(); for(int i = 0 ; i < size ; i ++) { Object obj = parameters.get(i); //主要是对字符串String过滤 if(obj instanceof String) { parameters.set(i, SensitiveWordFilter.filter(obj.toString())); } } return super.invoke(message); } }  

 

接下来在remoting-config.xml配置文件中修改适配器

<adapters> <!-- adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/ --> <adapter-definition id="java-object" class="mypackage.MyJavaAdapter" default="true"/> </adapters>

 

就这样做到了设置全局敏感词过滤器的功能。。。

你可能感兴趣的:(flex + java 过滤敏感词)