Spring MVC:我应该在哪里进行输入验证?

时间:2016-12-21 12:42:55

标签: javascript jquery ajax validation spring-mvc

我正在使用AJAX控制器。这是工作流程:

  1. 用户在文本框中输入数据,点击搜索
  2. 如果输入的数据与预期的(有效)数据格式不对应(即某些正确的正则表达式) - 应弹出验证错误消息
  3. 如果输入的数据正确,则调用控制器。控制器根据来自用户(文本框)的(经过验证的)数据调用外部服务,并返回相应的JSON,并将AJAX返回给客户端Javascript
  4. Controller.java

    @RequestMapping(value = "api/user/{user}", produces = "application/json", method = RequestMethod.GET)
    public @ResponseBody UserData execute(@PathVariable(value = "user") String user) {
    
        if(validator.isValid(user)) {
            return service.getUserData(user);
        } else {
            throw new ResourceNotFoundException(INVALID_USER_FORMAT);
        }
    

    的Javascript

    // obtain user from text input
    var user = $('#user_input').val();
    
    $.getJSON("/api/user/"+user, function (data) {
        // ...
    });
    

    目前,我已经在我的控制器中完成了验证,而不是在Javascript中。例如,我可以从控制器中删除它,只需在Javascript中使用它,如下所示:

        // obtain user from text input
        var user = $('#user_input').val();
    
        if(validate(asin)) {
               $.getJSON("/api/user/"+user, function (data) {
                    // ...
               });
        }
    

    问题

    什么是更好的,什么是更好的模式?在Controller中进行验证,或者在Javascript中进行验证?

2 个答案:

答案 0 :(得分:0)

最好是双方进行验证,但客户端验证是必须的,客户端验证将通过限制无效格式的数据来节省大量服务器命中。

答案 1 :(得分:0)

始终首选验证双方。

安全原因需要服务器端验证。用户不必总是通过客户端UI发送请求。一些恶意用户可以使用curl请求[例如。 postman]和任何用于请求操作的[ex JavaScript,angular etc]的脚本。

所以总是假设客户端可以发送任何你应该在服务器端验证它的东西。