SpringMVC的服务器验证

SpringMVC服务器验证—-JSR-303 java Bean 验证标准。

客户端验证:如果填写的数据不符合规则,就不会把数据提交到服务器(例如登录时,不填写账号和密码,不会把数据提交到服务器,客户端验证提示不能为空)。

服务器验证(两种情况):1.当通过非正常手段,跳过客户端验证,把不符合规则的数据提交到了服务器,此时需要进行客户端验证(例如登录时,直接通过地址栏把数据提交到服务器,不经过客户端验证)  —–跟客户端验证的功能一样,服务器验证是档户通过非正常手段跳过了客户端验证。 2.当客户端没有进行客户端验证时,也需要进行服务器验证。

服务器验证目的:验证从客户端提交到服务器的数据的格式正确与否,如果传来的数据格式不正确,提示客户数据不正确,减轻了服务器的压力。

案例:用户的登录,如果不填写账号和密码,通过服务器验证,会显示账号和密码不能为空,只有当两者都填写了之后才会通过验证。

用springmvc来连接客户端与服务器时,会自动把数据封装到请求方法的参数上,此时需要对传来的参数进行验证。 假设实体类是User

public class User {
    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;
    }
    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password + "]";
    }

}

1. 导入验证需要的jar包。
1.1 JSR-303 java Bean 的三个jar包
这里写图片描述
1.2 SLF4J日志包俩个
这里写图片描述
1.3 支持springMVC的额外包
1.3.1 spring核心包 5个
这里写图片描述
1.3.2 springweb包 3个
这里写图片描述

2. 创建验证类。实现validator接口

public class MyValidate implements Validator{
    /*springMVC数据的封装功能   指定符合条件的目标封装类(封装的目标类)需要验证*/
    //是否需要验证
    public boolean supports(Class<?> arg0) {
        return User.class.equals(arg0);   //指定user这个目标封装类需要验证
    }
    //验证
    public void validate(Object arg0, Errors error) {
        System.out.println("验证user"+arg0);
        ValidationUtils.rejectIfEmpty(error, "username", null, "用户名不能为空"); //如果username是空,则返回错误信息
        ValidationUtils.rejectIfEmpty(error, "password", null, "密码不能为空"//同上
}
**3. 设置验证类**      --当给一个类设置了验证类,这个类才具有服务器验证能
@Controller     //该类对象的创建交给springIoc去创建
public class MyController {
    /**
     * 给这个类绑定一个验证类
     * @param binder
     */
    @InitBinder
    public void initBinder(DataBinder binder){
        binder.setValidator(new MyValidate());     
    }

    @RequestMapping("/index")
    public String index(HttpServletRequest request){
        request.setAttribute("user", new User());
        return "index";
    }

    @RequestMapping("/login")
    public String login(User user) {
        if(!error.hasErrors()){
   //如果有错误信息,则不进行任何操作,在客户端给用户提示用户名不为空或密码不为空的的信息
            System.out.println(user);
            return "index";
        }
    }  

}
 **4. 在需要验证的bean的方法的参数上加上注解 @valid**

                 目的:请求这个特定的方法时,会进行服务器验证

/**
     * 前提:给这个类设置了验证类   及上面initBinder()这个方法
     * 当前提成立时,客户端请求服务器这个方法,会把数据封装到user对象中,如果前面写了@valid,则会验证,如果没有则不会验证
     * 
     *  客户端请求的方法必须带 Errors 这个参数   否则报org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errors
     *  Field error in object 'user' on field 'username': rejected value []; codes [null.user.username,null.username,null.java.lang.String,null]; arguments []; default message [用户名不能为空]
     *  Field error in object 'user' on field 'password': rejected value []; codes [null.user.password,null.password,null.java.lang.String,null]; arguments []; default message [密码不能为空]
     *   错误
     */


    @RequestMapping("/login")
    public String login(@Valid User user,Errors error) {
        if(!error.hasErrors()){
   //如果有错误信息,则不进行任何操作,在客户端给用户提示用户名不为空或密码不为空的的信息
            System.out.println(user);

            return "index";

        }
    }
      **5.客户端获取服务器验证错误信息**  

这里写图片描述
黄色部分获取步骤2中存放的错误信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值