勿以恶小而为之,勿以善小而不为--------------------------刘备

劝诸君,多行善事积福报,莫作恶

上一章简单介绍了Struts2利用验证框架实现数据验证(十一),如果没有看过,请观看上一章

有的时候,在论坛或者微博之类的项目中,常常需要对用户发表的评论或者回复进行相应的验证,

特别是在和谐社会的今天,要注意对一些敏感词汇的拦截校验。

以前认为需要用拦截器或者过滤器进行相应的验证,但是现在学到了Struts2的验证框架之后,可以使用验证框架,自己编写一个简单的拦截器。
(这个例子要特别鸣谢java1234知识分享网的锋哥前辈,就是改编自他的例子)

一 搭建一个简单的自定义验证环境

一 . 一 在action包下创建一个ReplyAction

package com.yjl.web.action;
import org.apache.log4j.Logger;import com.opensymphony.xwork2.ActionSupport;
/**
* @author 两个蝴蝶飞
* @version 创建时间:2018年9月13日 下午7:59:02
* 一个简单的回复的Action
*/
public class ReplyAction extends ActionSupport{private static final long serialVersionUID = -5000603998871975005L;private static Logger logger=Logger.getLogger(ReplyAction.class);//接收前端的输入,回复的语句private String comments;public String getComments() {return comments;}public void setComments(String comments) {this.comments = comments;}public String toSelfUI(){return "toSelfUI";}/*** 进行回复的动作*/public String reply(){logger.info("可以进行回复"+comments);return "reply";}
}

一.二 配置Struts.xml文件

<package name="user" extends="struts-default" namespace="/"><action name="Reply_*" class="com.yjl.web.action.ReplyAction" method="{1}"><!--不要忘记配置input.如果出错了,就还跳转到原来的界面--><result name="input">/WEB-INF/content/selfValidate.jsp</result><result name="toSelfUI">/WEB-INF/content/selfValidate.jsp</result><result name="reply">/WEB-INF/content/success.jsp</result></action>
</package>

一.三 编写前端的界面

一.三.一 编写 /content/selfValidate.jsp 页面

selfValidate.jsp页面

<body><h3>这是一个自定义验证的页面</h3><s:form action="Reply_reply.action" method="post" namespace="/"><s:textarea name="comments" label="请输入你的回复"></s:textarea><s:submit value="提交"/></s:form>
</body>

一.三.二 编写 /content/success.jsp 页面

success.jsp页面

<body>回复${comments}成功
</body>

一.四 重启服务器,进行基本的环境验证

输入网址: http://localhost:8090/Struts_validate/Reply_toSelfUI.action

输出的日志为:

成功success.jsp界面显示, 基本环境搭建好.

二. 进行过滤敏感词

二.一 在与ReplyAction同级目录下创建验证文件

这个验证文件只是针对ReplyAction下的reply()方法,

在struts.xml 中配置进入此方法的name 为: Reply_reply

故.xml文件命名为:ReplyAction-Reply_reply-validation.xml

ReplyAction-Reply_reply-validation.xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators><field name="comments"><field-validator type="requiredstring"><message>评论不能为空</message></field-validator><!-- 下面是自定义的评论,注意type的写法 没有sensitive,需要创建一个--><field-validator type="sensitive"><message>评论中含有敏感词汇,请他妈的不要骂人</message></field-validator></field>
</validators>

二.二 创建自定义验证器 sensitive

在com.yjl.web.validators新建一个验证的类 SensitiveWordValidator

新建SensitiveWordValidator类:

package com.yjl.web.validators;import org.apache.log4j.Logger;import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;/**
* @author 两个蝴蝶飞
* @version 创建时间:2018年9月13日 下午8:25:29
* 敏感词汇验证的验证器
*/
public class SensitiveWordValidator extends FieldValidatorSupport{private static Logger logger=Logger.getLogger(SensitiveWordValidator.class);private static String []senWords={"我操","操","你妈的","你大爷","日"};@Overridepublic void validate(Object object) throws ValidationException {logger.info("进入到敏感词汇的验证器里面了");String filedName=super.getFieldName();logger.info("得到了值filedName(哪个前端name):"+filedName);String value=this.getFieldValue(filedName, object).toString();logger.info("得到了值value(输入的值):"+value);logger.info("得到值object(哪个类的toString):"+object);//如果发现值在里面,则是错误的,是敏感词汇。 检测敏感词汇也是一个复杂的过程,这里将其简化一下//只用整体来判断 if(checkWord(value)){this.addFieldError(filedName,object);}}//判断单词是否在已经定义好的数组里面public boolean checkWord(String value){for (String word : senWords) {//如果包含,返回trueif(!value.equalsIgnoreCase("")&&word.indexOf(value)>-1){return true;}}return false;}
}

这个时候,需要将ReplyAction-reply-validator.xml中的sensitive类型与这个类进行关联.

二.三 关联自定义类型和相对应的类

在struts的下载目录下找到相对应validators.xml文件

将其复制放在在src目录下

validators.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator Config 1.0//EN""http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
<validators><validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/><validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/><validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/><validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/><validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/><validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/><validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/><validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/><validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/><validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/><validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/><validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/><validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/><validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/></validators>

这些类型实际上Struts2系统内部定义的验证数据类型。

在最后添加sensitive的验证:

     <!-- 自定义添加的拦截词验证 --><validator name="sensitive" class="com.yjl.web.validators.SensitiveWordValidator"/>

最好放在最后:

二.四 重启服务器,验证自定义的验证类

输入网址: http://localhost:8080/Struts_Reply/Reply_toSelfUI.action

可以正常的跳转到回复的页面

输入回复内容: 两个蝴蝶飞,你好, 不在拦截词里面

控制台打印输出:

success 界面也可以正常显示

输入回复内容: 我操, 在拦截词里面

被拦截了。

控制台打印输出:

本章节代码链接为:

链接:https://pan.baidu.com/s/1Kc28OiDceeAUyHGSrl5yWw
提取码:g9g6

谢谢您的观看!!!

Struts2编写自定义验证拦截敏感词汇(十二)相关推荐

  1. 技术宅的乐趣!网友编写出《流浪地球》“春节十二响”C语言源码

    [TechWeb]随着春节档科幻电影<流浪地球>的火爆,越来越多的网友对这部电影产生了浓厚的兴趣.电影中"春节十二响"的桥段相信会让每一个看过电影的观众记忆犹新. 近日 ...

  2. 百度大脑人脸识别深度验证与思考(十二)之断章

    点开这篇博文,让我带你进入一个全新的世界,那是一片我们所有人从未涉足过的领域,充满了玄妙.惊愕和震撼,感谢百度大脑这个人工智能,让我们可以有机会推开那扇小小的神奇之门. 前言 乍一看标题,觉得有些愕然 ...

  3. 用js验证敏感词汇(汉字)

    这里不多说,直接来代码: <SCRIPT SRC="checks.js"> </SCRIPT>//敏感词汇都写入在checks.js里 <script ...

  4. Spring MVC自定义验证注释

    在上一教程中,我展示了如何使用注释来验证表单 . 这对于简单的验证非常有用,但是最终,您需要验证一些现成的注释中没有的自定义规则. 例如,如果您需要根据输入的出生日期来验证用户已超过21岁,或者可能需 ...

  5. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

  6. Struts2的手工自定义验证--完整实例代码

    ActionSupport类实现了Validateable.ValidationAware接口, 其中Validateable接口就是验证器接口,该接口有一个validate()方法, validat ...

  7. Struts2 自定义验证器

    1.工程目录结构图: 2.以下依次帖代码:     a).    web.xml <?xml version="1.0" encoding="UTF-8" ...

  8. 使用struts2中默认的拦截器以及自定义拦截器

    转自:http://blog.sina.com.cn/s/blog_82f01d350101echs.html 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Acti ...

  9. struts2自定义验证器(身份证验证)

    struts2的验证器是用的xwork里面的验证,自定义验证器就是根据源码继承已有的字段验证器而来.具体步骤如下: 1.展开xwork-2.0.4.jar,com.opensymphony.xwork ...

最新文章

  1. Journey源码分析三:模板编译
  2. SDUTOJ [2801] 并查集模板
  3. python基于tpot训练模型并抑制输出stackingestimator、而是输出单模型例如xgboost设置
  4. 浪潮世科和浪潮软件什么关系_社交图形浪潮
  5. IT 事业发展:树立自己的品牌
  6. 【Java】《Java面向对象编程的三大特性》阅读笔记
  7. JavaSE基础chapter1Homework
  8. 1042 mysql57_一次处理DB2宕机的实战经历(SQL1042C )
  9. Java学习——Java基本的程序设计结构笔记(一)
  10. java web缓存技术
  11. python100例详解-python案例讲解
  12. 网络安全学习相关网站
  13. 刚买的win8.1电脑 求常用的软件推荐?
  14. android 关联dicom文件,基于Android的DICOM浏览器的开发
  15. 句子反转:小米笔试编程题目——python
  16. 中国水产科学研究院教授黄樟翰走进伊宅购集团考察伊家田园项目
  17. 解决:VS2010 无法打开“****”,因为此版本的应用程序不支持其项目类型
  18. QPainter、QPen、QBrush,绘图、填充、渐变等使用方法
  19. c语言程序的引言,C语言程序设计-第1章-引言
  20. [luogu2294] [HNOI2005]狡猾的商人

热门文章

  1. 楷书书法规则_写好楷书的五条规律,不懂这些,书法就很难入门
  2. 用jxcell导出图表到excel
  3. 计算机做word的表格,怎么用word做表格,电脑word表格详细制作教程
  4. 广西清华计算机专业兄弟,2017年清华大学清华在广西录取圆满结束
  5. 中国无线蓝牙打印机行业市场供需与战略研究报告
  6. R和RStudio安装包下载
  7. Centos 默认网关GATEWAY不生效
  8. layui省市县三级联动,如何设置select选择时,值为省市县code码
  9. english words
  10. Gradually Vanishing Bridge for Adversarial Domain Adaptation