spring boot
中可以用@Validated
來校驗數據,如果數據異常則會統一拋出異常,方便異常中心統一處理。
注解參數說明
注解名稱 | 功能 |
---|---|
@Xss | 檢查該字段是否存在跨站腳本工具 |
@Null | 檢查該字段為空 |
@NotNull | 不能為null |
@NotBlank | 不能為空,常用於檢查空字符串 |
@NotEmpty | 不能為空,多用於檢測list是否size是0 |
@Max | 該字段的值只能小於或等於該值 |
@Min | 該字段的值只能大於或等於該值 |
@Past | 檢查該字段的日期是在過去 |
@Future | 檢查該字段的日期是否是屬於將來的日期 |
檢查是否是一個有效的email地址 | |
@Pattern(regex=,flag=) | 被注釋的元素必須符合指定的正則表達式 |
@Range(min=,max=,message=) | 被注釋的元素必須在合適的范圍內 |
@Size(min=, max=) | 檢查該字段的size是否在min和max之間,可以是字符串、數組、集合、Map等 |
@Length(min=,max=) | 檢查所屬的字段的長度是否在min和max之間,只能用於字符串 |
@AssertTrue | 用於boolean字段,該字段只能為true |
@AssertFalse | 該字段的值只能為false |
數據校驗使用
1、基礎使用 因為spring boot
已經引入了基礎包,所以直接使用就可以了。首先在controller
上聲明@Validated
需要對數據進行校驗。
2、然后在對應字段Get方法
加上參數校驗注解,如果不符合驗證要求,則會以message
的信息為准,返回給前端。
自定義注解校驗
使用原生的@Validated
進行參數校驗時,都是特定的注解去校驗(例如字段長度、大小、不為空等),我們也可以用自定義的注解去進行校驗,例如項目中的@Xss
注解。
1、新增Xss
注解,設置自定義校驗器XssValidator.class
/** * 自定義xss校驗注解 * * @author ruoyi */ @Retention(RetentionPolicy.RUNTIME) @Target(value = { ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER }) @Constraint(validatedBy = { XssValidator.class }) public @interface Xss { String message() default "不允許任何腳本運行"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
2、自定義Xss
校驗器,實現ConstraintValidator
接口。
/** * 自定義xss校驗注解實現 * * @author ruoyi */ public class XssValidator implements ConstraintValidator<Xss, String> { private final String HTML_PATTERN = "<(\\S*?)[^>]*>.*?|<.*? />"; @Override public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) { return !containsHtml(value); } public boolean containsHtml(String value) { Pattern pattern = Pattern.compile(HTML_PATTERN); Matcher matcher = pattern.matcher(value); return matcher.matches(); } }
3、實體類使用自定義的@Xss
注解
@Xss(message = "登錄賬號不能包含腳本字符") @NotBlank(message = "登錄賬號不能為空") @Size(min = 0, max = 30, message = "登錄賬號長度不能超過30個字符") public String getLoginName() { return loginName; }
此時在去保存會進行驗證,如果不符合規則的字符(例如<script>alert(1);</script>
)會提示登錄賬號不能包含腳本字符
,代表限制成功。