SpringMVC的服务器验证

来源:互联网 发布:铣半圆编程 编辑:程序博客网 时间:2024/06/07 02:38

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中存放的错误信息

0 0
原创粉丝点击