首页 > 代码库 > 关键字校验

关键字校验

今天写点有意思的东西。从昨晚到今晚,花了一天时间写了一个关键字校验的内容:很简单(自认为感觉挺实用的...)

不管怎样,的确挺有趣的。(主要用到了模糊查询)

背景是这样的:在用户和管理员发布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 <!-- select语句,用于分页查询,传入一个map(map里有四个,分别是postMenu(帖子所属的主题编号),startIndex(每页起始的帖子编号),pageSize(每页里查询出的帖子数量),postTop(该条帖子是否可以发布) -->
 2   <select id="pagingQuery" resultMap="ResultMapWithBLOBs" parameterType="java.util.Map" >
 3       SELECT <include refid="Base_Column_List" />
 4     FROM
 5     post where post_menu=#{pageMenu} and post_top = #{postTop}
 6     LIMIT #{startIndex},
 7      #{pageSize}
 8   </select>
 9 <!-- select语句,查询出全部属于传入menuId的帖子集合 (postTop为1的帖子,和上面的sql有区别)-->
10   <select id="postAllForPostTop" resultMap="ResultMapWithBLOBs" parameterType="com.basketball.entity.Post" >
11       select * from post where post_menu = #{postMenu} and post_top = #{postTop}
12   </select>
13 <!-- 模糊查询,过滤post的postName(是否有脏话) -->
14   <select id="fuzzyQueryPostNameByProfanity" resultMap="ResultMapWithBLOBs" parameterType="java.util.Map" >
15       select * from post where post_name like #{profanityText} and post_id = #{postId}
16   </select>
17   <!-- 模糊查询,过滤post的postText(是否有脏话) -->
18   <select id="fuzzyQueryPostTextByProfanity" resultMap="ResultMapWithBLOBs" parameterType="java.util.Map" >
19       select * from post where post_text like #{profanityText} and post_id = #{postId}
20   </select>
21 <!-- update,当帖子通过审核的时候,post_top字段值由0变成1 -->
22   <update id="updatePostTop" parameterType="com.basketball.entity.Post" >
23       update post set post_top = #{postTop} where post_id = #{postId}
24   </update>

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         List<Profanity> profanityList = profanityMapper.selectProfanityAll();
 6         for(int i=0;i<profanityList.size();i++){
 7             Map<String,Object> map = new HashMap<String,Object>();
 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之后直接进行过滤判断是否含有脏话,有的话在前台是不会显示的。

先这样,等过段时间再回来看看要是看不懂的话,再往里面添加内容。

 

关键字校验