2016-12-21 11 views
0

私はAJAXコントローラを使用しています。ここではワークフローは次のとおりです。Spring MVC:入力検証はどこで行うべきですか?

  1. ユーザーがテキストボックスにデータを入力する入力されたデータが期待される(有効な)データ形式に対応していない場合は、(つまり、いくつかの正確な正規表現)検索
  2. を打つ - 検証エラーメッセージが表示されます
  3. 入力されたデータが正しい場合、コントローラが呼び出されます。コントローラは、ユーザ(テキストボックス)から(検証)データに基づいて、外部サービスを呼び出し、対応するJSONを返し、AJAXは、クライアント側のJavaScript

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) { 
    // ... 
}); 

、私は検証が私のコントローラで行われ、およびNOT JavaScriptで持っています。例えば、私は、コントローラからそれを削除することもできますし、単にJavaScriptでそれを持って、このような:

// obtain user from text input 
    var user = $('#user_input').val(); 

    if(validate(asin)) { 
      $.getJSON("/api/user/"+user, function (data) { 
       // ... 
      }); 
    } 

優れているどのような質問

、およびより良好なパターンは何ですか?コントローラのような、またはJavascriptでの検証がある?

答えて

0

両方の側で検証するのは良いですが、クライアント側の検証は必須です。クライアント側の検証では、無効な形式のデータを制限することで多くのサーバーヒットを保存します。

0

常に両方の側面を検証することをお勧めします。

セキュリティ上の理由からサーバー側の検証が必要です。ユーザーが常にクライアントのUIを通じて要求を送信する必要はありません。一部の悪意のあるユーザーがカール要求[ex。郵便配達員]と、リクエスト操作のための[ex JavaScript、angle etc]のスクリプト。

クライアントは、サーバー側でも検証する必要があるものはいつでも送信できると仮定します。

関連する問題