Struts2请求参数合法性校验机制
在Action中通过代码执行数据校验
请求参数的输入校验途径一般分两种:客户端校验 :通过JavaScript 完成 (jquery validation插件),目的:过滤正常用户的误操作。
服务器校验 :通过java代码完成 ,目的:整个应用阻止非法数据的最后防线
列如:
<h1>登录:请求数据校验--代码手动校验</h1><s:fielderror/><form action="${pageContext.request.contextPath }/login.action" method="post">用户名:<input type="text" name="username"/><s:fielderror fieldName="username" /><br/>密 码:<input type="password" name="password"/><br/><input type="submit" value="登录"/></form>
1.全局校验 (对当前Action的所有方法进行校验 )
如果要执行校验 ,Action必须继承ActionSupport 类 (因为它实现 Validateable接口)
//手动校验 public void validate() { //StringUtils.isBlank()方法判断输入是否为空if(StringUtils.isBlank(username)){/*将错误信息写入Map<String,List<String>> fieldErrors;当遇到workflow拦截器时,会判断错误集合的size的大于0,如果大于0,则向input的视图跳转*/super.addFieldError("username", "用户不能为空");} }
StringUtils 方法的操作对象是 java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数
String 为 null则不会抛出 NullPointerException ,而是做了相应处理。
JSP显示错误信息配置Struts2的特有标签S标签
在jsp增加显示错误信息 <s:fielderror />
校验机制原理分析:
2.局部校验 (校验Action中指定业务方法—校验一个方法 )
在Action 添加 validateXxx 方法(约定), 这里XXX 是要校验目标方法名 (只会对指定方法校验)
提示:
1.被校验方法首字母 要大写。
2.全局校验一直会执行,即使有局部校验。且先走的局部校验。
-----------------------------------------------------------------------------------------------------------------------------
基于XML配置实现校验
1. 全局校验 (校验当前Action 所有方法-是针对某一个action中的所有方法)----在Action类所在包,创建 Action类名-validation.xml
JSP页面同上
Action代码: Action 必须继承ActionSupport 类 (为了实现 Validateable接口 )
public class LoginAction extends ActionSupport {private static final long serialVersionUID = 1L;private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String execute() throws Exception {System.out.println(this);return INPUT;}@Overridepublic String toString() {return "LoginAction [username=" + username + ", password=" + password+ "]";}
XML代码:(必须和 action在容一个包下,Action类名-validation.xml)
<!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator 1.0.3//EN""http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"><validators><!-- 校验用户 --><field name="username"><field-validator type="requiredstring"><message>用户不能为空</message></field-validator></field><!-- 校验密码 --><field name="password"><field-validator type="requiredstring"><message>密码不能为空</message></field-validator></field></validators>
局部校验 (校验当前Action 指定方法 )
在Action类所在包,创建 Action类名-<action>name属性-validation.xml
JSP页面代码:
<h1>登录:请求数据校验--xml配置校验--局部</h1><s:fielderror/><form action="${pageContext.request.contextPath }/login3.action" method="post">用户名:<input type="text" name="username"/>(非空,且长度为3-10位)<br/>密 码:<input type="password" name="password"/>(必须,且长度为6-12)<br/>重复密码:<input type="password" name="repassword"/>(必须和密码一致)<br/>年龄:<input type="text" name="age"/>(数字,且必须是18-100)<br/>手机号码:<input type="text" name="mobile"/>(手机号规则,11位数字)<br/>邮箱:<input type="text" name="email"/>(邮箱格式)<br/><input type="submit" value="登录"/></form>
Action代码:
public class User2Action extends ActionSupport{private static final long serialVersionUID = 1L;private String username;private String password;private String repassword;private int age;private String mobile;private String email;public String login2(){System.out.println(this);return NONE;} /*GET和SET 方法略去...............toString方法略去..................*/
XML代码:
<!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator 1.0.3//EN""http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators><field name="username"><field-validator type="stringlength"><param name="minLength">3</param><param name="maxLength">10</param><message>用户名必须在3-10位</message></field-validator></field><field name="password"><field-validator type="stringlength"><param name="minLength">6</param><param name="maxLength">12</param><message>密码必须在6-12位</message></field-validator></field><field name="repassword"><field-validator type="fieldexpression"><param name="expression">password==repassword</param><message>两次输入密码不一致</message></field-validator></field><field name="age"><field-validator type="int"><param name="min">18</param><param name="max">100</param><message>年龄必须是18-100</message></field-validator></field><field name="mobile"><field-validator type="regex"><param name="regex"><![CDATA[^1[3|5|8|4]\d{9}$]]></param><message>用户名必须在3-10位</message></field-validator></field><field name="email"><field-validator type="email"><message>邮箱格式不正确</message></field-validator></field> </validators>
如果检测错误Action会自动跳转到input视图。
其他校验器可参考:
转载于:https://www.cnblogs.com/lxp503238/p/7147587.html
Struts2请求参数合法性校验机制相关推荐
- GO请求参数规则校验(自定义校验规则、规则中文化)
文章目录 1 简介 2 简单校验 3 自定义字段类型 4 结构层校验 5 翻译和自定义错误 6 国际化成中文 参数校验是开发中不可或缺的重要组成部分,本章节我们将介绍参数的校验,采用的是 go-p ...
- Spring Boot 2.x基础教程:JSR-303实现请求参数校验
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | didispace.com/spring-boot-learni ...
- Spring Boot 拦截器 请求参数MD5签名校验
拦截器定义 /*** 拦截器 请求参数签名校验* Created by jiyang on 14:47 2017/12/14*/ @Component @Slf4j public class Para ...
- Springboot中请求参数校验
1.添加依赖 <!-- 参数校验 --> <dependency><groupId>org.springframework.boot</groupId> ...
- java进行参数快捷校验,ehi-verification
ehi-verification 项目介绍 一个好用的快速的参数校验框架 支持直接调用校验并提供Spring-webmvc拦截器对请求参数进行校验 软件架构 没啥架构,不强制依赖第三方Jar包 更新记 ...
- struts2教程(5)--请求参数校验
一.请求参数校验介绍 校验的分类 :客户端数据校验 和服务器端数据校验 客户端数据校验 ,通过JavaScript完成校验 (改善用户体验,使用户减少出错 ) 服务器数据校验 ,使用框架内置校验功能( ...
- Struts2之Action接收请求参数和拦截器
技术分析之在Struts2框架中使用Servlet的API 1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据, ...
- sql2008安装时提示参数不能为空_Java Validation API,实现参数的合法性校验
Hibernate Validator是Java Validation API(JSR 303)标准的一个具体实现,用于对参数进行合法性校验.校验数据在任何应用中都是一个很常见的任务,所以JCP组织定 ...
- java中注解动态传参_Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)...
Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)java 前言:因为前段时间忙于写接口,在接口中须要作不少的参数校验,本着简洁.高效的原则,便写了这个小工具供本身使 ...
最新文章
- python的服务器、客户端被拒绝访问_python – uWSGI服务器日志…权限被拒绝读取......
- 中国电子学会scratch等级考试四级编程题:找出出现次数最多的数字
- php5.6 64位配置,centos(64位) 安装PHP5.6,配置LNMP
- 环境图配置不存在pbr_小米11再曝光,硬件参数不存在短板,完全最高旗舰配置...
- 关于easyui中的editIndex
- 反恐精英代码_反恐精英20周年,为什么沙漠2(dust2)地图玩家们一直玩不腻?...
- 【原创】Quartz代码详解
- 安卓log.e函数打印示例_log1p()函数以及C ++中的示例
- 华为:对学生定制机毫不知情 将会对虚假宣传追责
- [中英对照]The sysfs Filesystem | sysfs文件系统
- 人工智能:从单细胞生物的智能说起
- Java调用动态库 缺点,Java调用动态库所需要关心的有关问题
- 一个串口连接另外两个串口的设计
- 网易邮箱服务器邮箱协议,网易邮箱全面支持Exchange协议
- 微信公众平台发红包接口
- 【团体天梯赛/PTA】7-34 福到了 (15 分)
- 微信小程序_map组件实现定位
- bugku convert [MISC]
- 机械设备远程实时监控方案
- html表单验证方法,简述HTML交互式表单验证方法
热门文章
- win7计算机睡眠怎么设置方法,win7系统更改(设置)计算机睡眠时间的操作方法...
- Java开发知识点!手把手讲解-一个复杂动效的自定义绘制
- 【深度学习】像素级分割网络新思路之DeepLabv3+
- 【网络爬虫】BeautfulSoup爬百度百科(真の能看懂~!)
- python【力扣LeetCode算法题库】26-删除排序数组中的重复项
- python【力扣LeetCode算法题库】2-两数相加
- Tensorflow【实战Google深度学习框架】TensorFlow模型的保存与恢复加载
- Android移动开发之【Android实战项目】DAY14-修改json里某个字段的值
- centos 6.5手动同步ntp时钟_如何安装和配置 Chrony 作为 NTP 客户端? | Linux 中国
- 发那科机器人注油_如何给发那科机器人做三年保养?干货!