精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

參數校驗的六大神功!

開發 前端
"某一個周末下午,我接到電話,打開日志一看,??NullPointerException??堆棧里有38個不同位置的校驗邏輯。

新手司機翻車實錄

"哥,注冊接口又被刷爆了!

"某一個周末下午,我接到電話,打開日志一看,NullPointerException堆棧里有38個不同位置的校驗邏輯。

原來新人小王在Controller里寫滿了這樣的代碼:

// 典型錯誤示范(轉載自某小廠祖傳代碼)
public String register(UserDTO user) {
    if (user.getName() == null) {
        return"名字不能為空";
    }
    if (user.getAge() == null) {
        return"年齡不能為空";
    }
    if (user.getAge() < 18) {
        return"年齡不能小于18歲";
    }
    if (!user.getPhone().matches("^1[3-9]\\d{9}$")) {
        return"手機號不合法";
    }
    // ...后續還有20個if...
}

這才是代碼界的"九轉大腸"——每個入口都讓人窒息。

作為一位有很多開發經驗的老司機,今天,老夫帶你修煉參數校驗的6大神功。

圖片圖片

希望對你會有所幫助。

第一重:JSR規范基礎功

1.1 HibernateValidator瞬煉大法

可以使用Hibernate中Validator框架做參數校驗,具體代碼如下:

public class UserDTO {
    @NotBlank(message = "名稱要填,皮這一下很開心?")
    private String name;

    @NotNull
    @Min(value = 18, message = "未成年禁止入內")
    @Max(60)
    private Integer age;

    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "這手機號是哪國來的?")
    private String phone;
}

// Controller層啟用校驗(新手必知第一步)
@PostMapping("/register")
public Result register(@Valid @RequestBody UserDTO user) {
    // 業務代碼...
}

技術要點

  • 引入spring-boot-starter-validation依賴(調料包記得加)
  • @Valid注解要放在入參側(別貼在DTO類上)
  • 錯誤信息會進BindingResult(打掃戰場需要手動處理)

第二重:全局異常擒龍手

2.1 統一異常攔截器

我們需要對異常進行統一攔截。

這樣在出現參數校驗異常,比如空指針時,不會把服務的內部錯誤信息直接輸出給用戶。

通過@RestControllerAdvice和@ExceptionHandler注解實現統一異常攔截器的功能。

具體代碼如下:

@RestControllerAdvice
publicclass GlobalExceptionHandler {
    
    // 專治各種不服校驗
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result handleValidException(MethodArgumentNotValidException e) {
        BindingResult result = e.getBindingResult();
        return Result.fail(result.getFieldError().getDefaultMessage());
    }
}

// 返回格式規范(示例)
publicclass Result<T> {
    private Integer code;
    private String msg;
    private T data;
    
    publicstatic <T> Result<T> fail(String message) {
        returnnew Result<>(500, message, null);
    }
}

反爬蟲機制

  • 禁止直接暴露字段名給前端(攻擊者會利用字段名信息)
  • 錯誤信息字典化管理(后面會教國際化這招)

第三重:自定義校驗屠龍技

3.1 手機/郵箱二元校驗

有時候,Hibernate Validator框架或者其他校驗框架定義的校驗不滿足需求,我們需要自定義校驗規則。

則可以自定義注解,實現ConstraintValidator接口,來實現具體的自定義的校驗邏輯。

自定義注解@Contact在字段上使用。

具體代碼如下:

@Target({FIELD, PARAMETER})
@Retention(RUNTIME)
@Constraint(validatedBy = ContactValidator.class)
public @interface Contact {
    String message() default "聯系方式格式錯誤";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

// 校驗邏輯實現(不要相信前端的下拉框?。?publicclass ContactValidator implements ConstraintValidator<Contact, String> {
    
    privatestaticfinal Pattern PHONE_PATTERN = Pattern.compile("^1[3-9]\\d{9}$");
    privatestaticfinal Pattern EMAIL_PATTERN = Pattern.compile("^\\w+@\\w+\\.\\w+$");

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return PHONE_PATTERN.matcher(value).matches() 
               || EMAIL_PATTERN.matcher(value).matches();
    }
}

六邊形戰士培養計劃

  • 可通過context.buildConstraintViolationWithTemplate()動態修改錯誤信息
  • 支持DI注入Spring管理的Bean(比如從數據庫加載正則)

第四重:分組校驗北冥功

4.1 增刪改查不同校驗規則

對于增刪改查中,對于實體對象中的同一個參數,在不同的應用場景中需要做不同分組校驗。

具體代碼如下:

// 定義校驗組別(劃分陣營)
publicinterface CreateGroup {}
publicinterface UpdateGroup {}

// DTO根據場景應用分組
publicclass ProductDTO {
    @Null(groups = UpdateGroup.class)
    @NotNull(groups = CreateGroup.class)
    private Long id;

    @NotBlank(groups = {CreateGroup.class, UpdateGroup.class})
    private String name;
}

// 控制層按需激活校驗組  
@PostMapping("/create")
public Result create(@Validated(CreateGroup.class) @RequestBody ProductDTO dto) {
    // 創建邏輯
}

多副本作戰手冊

  • Default組始終生效(除非使用groups顯式配置)
  • 妙用@ConvertGroup進行分組轉換

第五重:跨界校驗凌波微步

5.1 跨字段關系校驗

如果存在跨字段關系校驗的情況,即組合條件校驗,比如:用戶密碼和確認密碼,可以將自定義注解作用在類上。

具體代碼如下:

@Target(TYPE)
@Retention(RUNTIME)
@Constraint(validatedBy = PasswordValidator.class)
public @interface PasswordValid {
    String message() default "兩次密碼不一致";
    // ...
}

publicclass PasswordValidator implements ConstraintValidator<PasswordValid, UserDTO> {
    
    @Override
    public boolean isValid(UserDTO user, ConstraintValidatorContext context) {
        return user.getPassword().equals(user.getConfirmPassword());
    }
}

// 應用到類級別
@PasswordValid
publicclass UserDTO {
    private String password;
    private String confirmPassword;
}

風控新法

  • 適用于訂單金額與優惠券匹配等業務規則
  • DDD值對象的天然場景

第六重:規則引擎之天機策

天機殿的自動化戰場

新來的產品小妹指著參數校驗文檔:"每次改個手機號正則都要等發版?

"我默默掏出了祖傳的規則引擎。

這種政商聯動的需求,是時候施展大型工程的必殺技了!

6.1 規則引擎的三層境界

第一境:硬編碼校驗(青銅段位的if-else)第二境:配置化校驗(黃金段位的數據庫規則表)第三境:熱力場作戰(王者段位的動態規則引擎)

6.2 Drools天機大陣部署實錄

戰場場景:信貸額度動態校驗(每小時調整風控模型) 。

天機規則文件如下:

// 天機規則文件(credit_rule.drl)
rule "白領貸基礎校驗"
    when
        $req : LoanRequest(
            occupation == "白領", 
            salary > 10000, 
            age >= 25 && age <= 45
        )
    then
        $req.setRiskScore(-10); //加分項
end

rule "高危行業攔截"
    when
        $req : LoanRequest(
            industry in ("賭博業", "傳銷"), 
            location.contains("緬甸")
        )
    then
        throw new ValidationException("閣下莫非是緬北戰神?"); 
end

布陣心法

圖片圖片

陣法要訣

  1. 規則文件按業務線拆分(金融/電商/社交各立山頭)
  2. 使用kie-maven-plugin自動編譯規則文件
  3. KieScanner監聽規則變更(天機更新不重啟服務)

6.3 SpringBoot接引天機大陣

法咒集成

@Configuration
publicclass DroolsConfig {
    
    @Bean
    public KieContainer kieContainer() {
        KieServices ks = KieServices.Factory.get();
        KieFileSystem kfs = ks.newKieFileSystem();
        
        // 加載天機卷軸(規則文件)
        Resource resource = new ClassPathResource("rules/credit_rule.drl");
        kfs.write(ks.getResources().newInputStreamResource(resource.getInputStream())
                    .setTargetPath("credit_rule.drl"));
        
        KieBuilder kieBuilder = ks.newKieBuilder(kfs).buildAll();
        return ks.newKieContainer(kieBuilder.getKieModule().getReleaseId());
    }
}

// Controller層調用天尊之力
@PostMapping("/apply")
public Result applyLoan(@RequestBody LoanRequest request) {
    kieSession.insert(request);
    kieSession.fireAllRules(); // 執行天機推演
    return riskService.process(request);
}

天機沙箱防御

  1. 限制規則中eval()的使用次數(防CPU過載)
  2. 為每個請求創建獨立KieSession(防線程污染)
  3. 設置規則執行超時熔斷(天機殿也有算不動的時候)

6.4 天機策反制訣竅

某次上線后,規則引擎的神操作:

rule "特殊時段放水"
    when
        $req : LoanRequest(hour > 2 && hour < 5)
    then
        $req.setCreditLimit(50000); //給值夜班的兄弟開后門
end

反制方案

  1. 規則提交走審批流(太上長老團聯署制)
  2. 生產環境禁用update/modify關鍵字(防自動奪舍)
  3. 規則版本回滾機制(祭出玄天寶鏡倒轉時空)

祖師爺級參數校驗綱領

段位

招式名稱

修煉難度

適用場景

破壞力

青銅

if-else硬編碼

★☆☆

小型工具類

???

白銀

JSR注解大法

★★☆

常規CRUD

??

黃金

全局異常攔截

★★★

RESTful API

?

鉑金

定制校驗規則

★★★☆

復雜業務規則

?

鉆石

組合條件校驗

★★★★

跨字段業務約束

?

王者

規則引擎整合

★★★★★

動態風控場景

?

避坑法門

  1. 不過三:Controller層校驗不要超過三層(應該轉給Service)
  2. 見好就收:業務規則校驗與基礎格式校驗分離
  3. 防君子更防小人:服務端校驗必須存在(前端校驗是防君子用的)
  4. 語義明確:錯誤提示避免暴露敏感信息(比如"用戶不存在"改為"賬號或密碼錯誤")

最后提醒各位大俠:好的參數校驗就像空氣——你平時感受不到它的存在,但一旦失去它,整個系統瞬間崩塌?。ùafields正提刀趕來)


責任編輯:武曉燕 來源: 蘇三說技術
相關推薦

2016-08-24 15:39:46

ownCloud存儲服務器

2024-10-22 14:42:14

2016-07-06 11:16:47

2023-07-24 11:01:32

2023-05-11 11:36:56

云計算云供應商

2011-03-16 10:44:19

2013-08-23 10:18:06

Hadoop

2010-09-09 10:54:58

2021-08-12 14:31:52

邊緣計算云計算數據

2013-08-23 10:42:03

Hadoop

2023-08-31 22:12:51

低代碼隱患技術

2022-01-23 10:44:39

零信任網絡安全網絡攻擊

2010-08-16 10:14:23

云計算誤區

2010-09-25 15:22:19

DHCP故障處理

2010-07-30 13:15:17

Flex優勢

2023-10-18 10:48:44

Python解釋器

2018-07-04 06:08:15

2018-10-24 10:47:30

云計算IT網絡

2018-02-27 11:01:42

2019-04-29 13:22:58

數據保護GDPR數據安全
點贊
收藏

51CTO技術棧公眾號

91色九色蝌蚪| 亚洲青涩在线| 精品国产一区二区精华| 哪个网站能看毛片| 欧美成年黄网站色视频| a亚洲天堂av| 国产精品美女呻吟| 五月天婷婷丁香| 成人综合一区| 欧美精品一区二区三| 中国黄色片免费看| 性感女国产在线| 亚洲精品一二三四区| 精品国产一二| 午夜精品小视频| 麻豆久久一区二区| 欧美在线激情视频| 久久精品视频免费在线观看| 精品国产一区二区三区四区 | 国产精品美女www爽爽爽| 91久久国产综合久久蜜月精品| 伊人久久久久久久久久久久| 亚洲调教视频在线观看| 精品国产欧美一区二区五十路| 免费看91视频| 99精品视频在线免费播放| 欧美色欧美亚洲高清在线视频| 91视频成人免费| 超碰免费97在线观看| av在线播放一区二区三区| 亚洲在线视频福利| 中文在线字幕免费观| 亚洲永久字幕| 午夜精品免费视频| 国产一级片久久| 亚洲色图欧美| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 日本韩国在线视频爽| 国产亚洲综合av| 久久亚洲综合网| 午夜福利视频一区二区| 国产91在线|亚洲| 亚洲xxxx视频| 国产99视频在线| 激情综合五月婷婷| 91视频国产高清| 96日本xxxxxⅹxxx17| 美女视频免费一区| 国产日韩精品在线播放| 影音先锋黄色网址| 麻豆精品国产传媒mv男同| 国产精品人成电影| 亚洲一级特黄毛片| 奇米精品一区二区三区在线观看 | 日韩中文在线电影| 丝袜美腿精品国产二区| 亚洲成人黄色av| 国产亚洲一区| 中文字幕在线日韩 | 日本a一级在线免费播放| 91亚洲精华国产精华精华液| 精品久久精品久久| 四虎成人免费在线| 国产欧美一区二区精品婷婷| 亚洲高清123| 欧美96在线| 亚洲最快最全在线视频| 男女啪啪免费视频网站| 亚洲欧美小说色综合小说一区| 色综合色综合色综合| 欧美一级特黄a| 国产一区二区三区免费在线| 欧美成人a视频| 人妻少妇精品视频一区二区三区| 婷婷亚洲精品| 国产一区二区激情| 欧美国产精品一二三| 亚洲激情在线| 国产成人鲁鲁免费视频a| 91黄色在线视频| 国产成人综合精品三级| 久久久久综合一区二区三区| wwwxxx在线观看| 亚洲一二三区在线观看| 日本成年人网址| 亚洲免费资源| 亚洲第一区在线| 日韩精品电影一区二区三区| 国产综合亚洲精品一区二| 欧美中文在线观看国产| 97在线公开视频| 99久久久精品免费观看国产蜜| 日韩一区二区电影在线观看| 97caopor国产在线视频| 欧美性猛交xxxx黑人| 五月天丁香花婷婷| 一区二区导航| 欧美另类99xxxxx| 中文字幕国产在线观看| 韩国欧美国产1区| 鲁丝一区二区三区免费| 9191在线播放| 欧美午夜免费电影| 国产精品嫩草av| 亚洲免费二区| 国产精品高潮呻吟视频| 人人妻人人澡人人爽人人欧美一区| 国产日韩欧美综合在线| 激情小视频网站| 日韩久久一区| 国产亚洲欧美视频| xxxx.国产| 豆国产96在线|亚洲| 亚洲成人18| 在线男人天堂| 亚洲精品一区二区三区在线观看| 亚洲毛片亚洲毛片亚洲毛片| 亚洲在线一区| 高清一区二区三区视频| 午夜精品一区| 欧洲av一区二区嗯嗯嗯啊| a天堂视频在线观看| 在线一区免费| 国产综合久久久久| 国产黄在线播放| 黑人巨大精品欧美一区二区三区| 性生交大片免费看l| 日本一区二区在线看| 清纯唯美日韩制服另类| 污污视频在线免费看| 一区二区三区在线影院| 亚洲国产午夜精品| 天天综合网91| 国产综合久久久久| 色网站免费在线观看| 91精品91久久久中77777| 加勒比精品视频| 亚洲二区在线| 精品国产乱码久久久久久88av| 日本性爱视频在线观看| 欧美一区二区国产| 中文字幕五月天| 国产一区二区精品久久99| 亚洲一区在线免费| 香蕉成人在线| 久久综合色88| 午夜久久久久久久久久| 亚洲综合一二区| 成人啪啪18免费游戏链接| 在线看片成人| 精品在线一区| 丁香六月综合| 夜夜嗨av色一区二区不卡| 国产又粗又猛又爽又| 国产视频一区二区三区在线观看 | 国产成人精品三级麻豆| 99热这里只有精品免费| 99ri日韩精品视频| 91av视频在线| 国产理论电影在线观看| 欧美日韩国产高清一区二区三区 | 黄视频网站在线| 日韩欧美高清dvd碟片| 国产一级av毛片| 久久伊人中文字幕| 亚洲一级片免费| 欧美 日韩 国产精品免费观看| 国产91精品入口17c| 老司机深夜福利在线观看| 亚洲欧洲免费视频| 在线亚洲欧美日韩| 一区二区三区在线观看网站| 成人午夜精品无码区| 久久精品人人| 亚洲自拍偷拍一区二区三区| 国产精品视频3p| 国产精品久久国产精品99gif| 黄色成人影院| 日韩av最新在线| 中文字字幕在线中文乱码| 一区二区三区在线看| 手机在线看片日韩| 激情久久五月天| 男人用嘴添女人下身免费视频| 精品久久成人| 国产经品一区二区| 中文字幕日本一区二区| 久久视频这里只有精品| 欧美成年人视频| 日本在线一级片| 99久久国产综合精品女不卡 | 免费久久99精品国产| 加勒比海盗1在线观看免费国语版| 国产精品jk白丝蜜臀av小说| 国产九九精品视频| 大黄网站在线观看| 国产亚洲人成网站在线观看| 亚洲av无码乱码国产精品| 色综合久久久久久久久久久| 欧美成人精品一区二区免费看片| 久久久综合激的五月天| 在线播放免费视频| 亚洲尤物影院| 欧美中文字幕在线观看视频 | 日韩中文字幕精品| 水莓100在线视频| 欧美岛国在线观看| 亚洲天堂2021av| 日韩欧美国产激情| 久久综合亚洲色hezyo国产| 国产精品狼人久久影院观看方式| 少妇户外露出[11p]| 国产酒店精品激情| 我看黄色一级片| 久久久久国产精品午夜一区| 亚洲精品久久久久久久蜜桃臀| 久久国产综合| 欧美日韩一区在线视频| 女仆av观看一区| av日韩中文字幕| 成人豆花视频| 成人福利免费观看| 国产日本久久| 国产精品视频久久久久| 桃花岛tv亚洲品质| 日本精品久久久久影院| 色多多在线观看| 国内精品视频在线| sm在线观看| 欧美激情一区二区久久久| 国产黄网站在线观看| 日韩一二三在线视频播| 午夜免费视频在线国产| 亚洲人精品午夜在线观看| 手机福利小视频在线播放| 亚洲国产成人精品电影| 丰满人妻一区二区三区四区53| 欧美一二三区在线| 国产黄色大片网站| 欧美成人精品二区三区99精品| 国产三级第一页| 欧美一区二区三区免费在线看| 一级黄色免费看| 欧美男人的天堂一二区| 国产裸体无遮挡| 欧美一三区三区四区免费在线看| 国产片在线播放| 日韩精品一区二区在线| 丰满熟妇人妻中文字幕| 亚洲激情视频在线播放| 极品白浆推特女神在线观看| 亚洲欧美国产另类| 国产69精品久久app免费版| 在线视频国产日韩| 日韩专区在线| 欧美成年人视频网站欧美| 主播国产精品| 国外成人在线视频| 欧美日韩大片| 91精品久久久久久综合乱菊| 日韩激情欧美| 黑人另类av| 成人激情电影在线| 黄色一级视频播放| 国内久久精品| 大肉大捧一进一出好爽视频| 久久久成人网| 天天色天天综合网| 北条麻妃国产九九精品视频| 草草地址线路①屁屁影院成人| 国产三级一区二区| 麻豆视频在线免费看| 五月天国产精品| 中文字幕日本视频| 日韩一区二区三区在线| 偷拍自拍在线视频| 中文字幕亚洲欧美| 一色桃子av在线| 欧美亚洲成人免费| 高清精品久久| 久久精品中文字幕一区二区三区| 狠狠操综合网| 岛国大片在线播放| 青椒成人免费视频| 日本一区二区在线观看视频| 久久久不卡网国产精品一区| 欧美黑人猛猛猛| 日韩欧美国产高清91| 国内精品国产成人国产三级| 精品小视频在线| 二区三区在线观看| 人人做人人澡人人爽欧美| 久久的色偷偷| 日本中文不卡| 亚洲国产专区| 天堂在线一区二区三区| 91视频xxxx| 黄页网站免费观看| 欧美日韩国产免费| 深夜福利在线观看直播| 久久中文久久字幕| 欧美日韩五码| 国产综合第一页| 希岛爱理av一区二区三区| 国产成人a亚洲精v品无码| 国产经典欧美精品| 国产又粗又硬视频| 欧美日韩亚洲视频| 成人久久精品人妻一区二区三区| 俺去了亚洲欧美日韩| 3d欧美精品动漫xxxx无尽| 国产精品免费区二区三区观看| 99久久影视| 男人插女人下面免费视频| 成人免费的视频| 全网免费在线播放视频入口 | 免费观看国产精品| 久久九九亚洲综合| 成人国产一区| 视频一区国产精品| 噜噜噜在线观看免费视频日韩| 国产女人18毛片水真多18| 亚洲视频一区二区在线| 在线观看亚洲一区二区| 一区二区三区四区在线观看视频| 麻豆蜜桃在线观看| 狠狠爱一区二区三区| 亚洲激情网站| 一级特黄a大片免费| 亚洲国产综合在线| 好吊视频一区二区三区| 欧美黑人极品猛少妇色xxxxx| 亚洲网站三级| 一级黄色免费在线观看| 精品综合久久久久久8888| 日韩av片在线免费观看| 欧美亚洲动漫另类| 国产精品久久久久久久龚玥菲| 青草成人免费视频| 亚洲人亚洲人色久| 超碰网在线观看| 国产日韩欧美高清| 最近中文字幕免费在线观看| 揄拍成人国产精品视频| 成人久久网站| 精品久久免费观看| 国产精品一二三| 国产真人真事毛片| 日韩精品在线电影| 亚洲不卡系列| 超碰在线免费观看97| 狠狠色丁香婷婷综合| 欧美成人国产精品高潮| 精品99久久久久久| 成人免费网站视频| 亚洲图片在线观看| 国产一区二区美女| 妺妺窝人体色www聚色窝仙踪 | 国产精品毛片| 国产精品高清无码在线观看| 91福利社在线观看| 欧美成人三区| 国产精品一区二区三区在线观 | 亚洲综合精品自拍| 日韩porn| 国产在线不卡精品| 午夜视频一区| 欧美成人午夜精品免费| 欧美日韩精品系列| 在线三级中文| 欧美成人综合一区| 卡一卡二国产精品| 久久中文字幕在线观看| 亚洲天堂av在线免费观看| 亚洲天堂网站| 亚洲午夜无码av毛片久久| 国产精品伦理在线| 黄色www视频| 国产精品网红福利| 黄色成人精品网站| 亚洲码无人客一区二区三区| 91精品欧美一区二区三区综合在| а√天堂8资源在线| 亚洲一卡二卡三卡| 成人av在线播放网址| 亚洲精品无码久久久久| 美女视频久久黄| 色综合中文网| 俄罗斯女人裸体性做爰| 色美美综合视频| 污视频免费在线观看| 性欧美精品一区二区三区在线播放| 国产在线播放一区| 亚洲熟妇无码乱子av电影| 久久高清视频免费| 国产探花在线精品一区二区| 亚洲v在线观看| 欧美日韩精品免费| 欧美二三四区| www精品久久|