私はウェブ上の自分のプロフィールを編集する簡単なフォームを持っています。ユーザーを表す「Person」Beanには、フォームで変更できない多くの内部フィールドが含まれています。したがって、私はフォーム上で編集可能なフィールドのサブセットを持っています。ここまでは順調ですね。一部の上級ユーザーがChromeブラウザで開発ツールを開き、フォームに他のフィールドを追加したり、既存のフィールドの名前を変更したりすると、これらのフィールドは 'Person' Beanにバインドされ、データベースに格納されます。そのような方法で、ユーザーはフォームを簡単にスプーフィングし、許可されていないフィールドの値を変更することができます。フォームの送信中にどのフィールド(Beanプロパティ)をバインドできるか(サーバー側)を定義する方法はありますか?ここでフォーム提出時にバインドされるフィールドを避けるにはどうすればよいですか?
は、コントローラのメソッドのシグネチャは、アイデアを得るためにどのように見えるかです:
@RequestMapping(path = "/profile/edit", method = RequestMethod.POST)
public String editProfile(@ModelAttribute("profile") Person doc, BindingResult result, Model m){
... saving doc to database ...
}
私はThymeleafとSpringBoot 1.3.5を使用しています...
'@ InitBinder'でアノテーション付けされたメソッドを作成し、[' WebDataBinder']型の引数を渡します(http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web /bind/WebDataBinder.html)、どのフィールドが許可されているか許可されていないかを設定できます。 –