Oval 検証フレームワークを使用して、HTML フィールドが悪意のある JavaScript コードを保持できないフィールドを検証しています。悪意のあるコードを検出するために、フィールドでエラー メッセージとして使用したいエラーのリストを返す外部フレームワークを使用しています。私が直面している問題は、setMessages(List) のようなことをしたいのに、チェックの実装では setMessage しかできないことです。そのため、現在はエラーをコンマで結合しているだけですが、リストとして戻すことをお勧めします。
注釈
@Target({ ElementType.METHOD, ElementType.FIELD})
@Retention( RetentionPolicy.RUNTIME)
@Constraint(checkWith = HtmlFieldValidator.class)
public @interface HtmlField {
String message() default "HTML could not be validated";
}
小切手
public class HtmlFieldValidator extends AbstractAnnotationCheck<HtmlDefaultValue> {
public boolean isSatisfied( Object o, Object o1, OValContext oValContext, Validator validator ) throws OValException {
if (o1 == null) {
return true;
} else {
CleanResults cleanResults = UIowaAntiSamy.cleanHtml((String) o1);
if (cleanResults.getErrorMessages().size() > 0) {
String errors = StringUtils.join(cleanResults.getErrorMessages(), ", ");
this.setMessage(errors);
return false;
} else {
return true;
}
}
}
}
モデルクラス
class Foo {
@HtmlField
public String bar;
}
コントローラーコード
Validator validator = new Validator(); // use the OVal validator
Foo foo = new Foo();
foo.bar = "<script>hack()</script>";
List<ConstraintViolation> violations = validator.validate(bo);
if (violations.size() > 0) {
// inform the user that I cannot accept the string because
// it contains invalid html, using error messages from OVal
}