关键字校验
Posted 燕麦酸奶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关键字校验相关的知识,希望对你有一定的参考价值。
今天写点有意思的东西。从昨晚到今晚,花了一天时间写了一个关键字校验的内容:很简单(自认为感觉挺实用的...)
不管怎样,的确挺有趣的。(主要用到了模糊查询)
背景是这样的:在用户和管理员发布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之后直接进行过滤判断是否含有脏话,有的话在前台是不会显示的。
先这样,等过段时间再回来看看要是看不懂的话,再往里面添加内容。
以上是关于关键字校验的主要内容,如果未能解决你的问题,请参考以下文章