验证

http://kitty:8888/testing11-struts2-ch4/addUser.action?usre=&upassword=&email=&sex=&money=0

通过地址栏挂参: 可以轻松绕过 jquery等验证规则的前端校验;

js、jquery: 前端校验;

action: 后台校验;

解决办法: 服务器端也同样需要写验证规则;

 

服务器端校验:
1、直接在业务方法中,添加验证规则;
public String addTwo(){
log.info("获取jsp传递过来的数据userBean:"+userBean);
//条件判断规则是否满足
if(userBean.getUser() == null || userBean.getUser().equals("")){
request.setAttribute("message", "用户名不能为空");
return "addTwoUser";
}else if(userBean.getUser().length()<6 || userBean.getUser().length()>12){
request.setAttribute("message", "用户名长度只能在6-12之间");
return "addTwoUser";
}
return "addTwoUser";
}

2、在struts2中的控制层,专门写一个验证方法
2.1、控制层类需继承ActionSupport类;
2.2、控制层中需重写validate方法,并编写验证规则,验证不通过向addFieldError添加消息提示;
2.3、在struts.xml文件中配置input返回(验证不通过,需转发到input指明的页面);
2.4、在input指明的jsp页面中,写错误提示标签<s:fielderror />
public void validate() {}

3、第二步有一个天然的bug,使用validate方法校验, 会让当前action下的所有的请求业务方法实施拦截;比如新增的业务验证(查询,删除肯定不适用)
所以,一般我们使用哪个业务方法,就写哪个业务方法的验证方法; validateXXX()
public void validateAddTwo() {
log.info("验证方法.......");
log.info("验证方法获取jsp传递过来的数据userBean:"+userBean);
if(userBean.getUser() == null || userBean.getUser().equals("")){
addFieldError("user.empty.message", "用户名不能为空");
}else if(userBean.getUser().length()<6 || userBean.getUser().length()>12){
addFieldError("user.length.message", "用户名长度只能在6-12之间");
}
System.out.println("----------验证规则的filedError集合的长度:"+getFieldErrors().size());
}
public String addTwo(){ }

4、以上1、2、3三种都是在java类中内部验证; 而struts2还提供了一个外部验证方式; 支持xml外部验证;
类名-path-validation.xml
4.1、在action类同级目录下,创建"类名-path-validation.xml",在里面编写验证规则即可。
4.2、在struts.xml文件中配置input返回(验证不通过,需转发到input指明的页面);
4.3、在input指明的jsp页面中,写错误提示标签<s:fielderror />
4.4、如果提交后通过验证规则,请求进入目标的业务方法; 否则指向input指明的页面;



前端校验: 必须的; 主要js校验,目的是减轻不合法的数据提交到服务器中;
服务器校验: 重新过滤一遍数据,保持数据的完整性;


posted @ 2017-06-05 19:39  hdsfakjhf  阅读(355)  评论(0编辑  收藏  举报