今天写点有意思的东西。从昨晚到今晚,花了一天时间写了一个关键字校验的内容:很简单(自认为感觉挺实用的...)
不管怎样,的确挺有趣的。(主要用到了模糊查询)
背景是这样的:在用户和管理员发布1.帖子信息,2.评论,3.留言时,要对这三者进行一个验证(即所谓的关键字过滤,出现了脏话我就不让他发表)。
思路:
1.要在post,reply,message这三个表中都添加一个新字段xxx_review(表示该条记录是否被发布,默认为0通过关键字过滤改为1)
2.先将profanity(关键字表)表里的所有脏话查出来,放进一个List中。
3.通过模糊查询,查询要被验证的信息里是否含有profanityText
以post为例,演示验证的过程:
post有postName以及postText,这两者只要有一个含有脏话就不允许发布post
PostMapper:下面的代码中post_top字段就是post_review字段(偷懒了,不想改了)我只上传了一部分会用到的sql语句
1 2 9 10 13 14 17 18 21 2223 update post set post_top = #{postTop} where post_id = #{postId}24
profanityService层:直接在insertPost之后调用该方法。
1 //利用传出的Profanity集合过滤postName以及postText,如果post通过过滤则返回一个1反之则为0(在insert一条post的时候调用) 2 @Override 3 public int checkProfanityPost(int postId) { 4 // TODO Auto-generated method stub 5 ListprofanityList = profanityMapper.selectProfanityAll(); 6 for(int i=0;i map = new HashMap (); 8 map.put("profanityText", "%"+profanityList.get(i).getProfanityText()+"%"); 9 map.put("postId", postId);10 Post postNameProfanity = postMapper.fuzzyQueryPostNameByProfanity(map);11 if(postNameProfanity!=null){12 //表示发布失败13 return 0;14 }15 Post postTextProfanity = postMapper.fuzzyQueryPostTextByProfanity(map);16 if(postTextProfanity!=null){17 return 0;18 }19 }20 Post post = new Post();21 post.setPostId(postId);22 post.setPostTop(1);23 postMapper.updatePostTop(post);24 return 1;25 }
再添加这条post之后直接进行过滤判断是否含有脏话,有的话在前台是不会显示的。
先这样,等过段时间再回来看看要是看不懂的话,再往里面添加内容。