日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

责任链模式以及应用场景

發布時間:2024/1/1 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 责任链模式以及应用场景 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

責任鏈模式應用

責任鏈模式(Chain of Responsibility Pattern)為請求創建了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發送者和接收者進行解耦。這種類型的設計模式屬于行為型模式。

在這種模式中,通常每個接收者都包含對另一個接收者的引用。如果一個對象不能處理該請求,那么它會把相同的請求傳給下一個接收者,依此類推。

應用場景

用戶登錄分為用戶名密碼登錄和手機驗證碼登錄,兩種登錄模式分別需要進行不同的信息校驗;例如用戶名密碼登錄需要進行用戶是否存在、用戶是否被鎖定、密碼校驗等校驗。手機驗證碼登錄需要進行用戶是否存在、驗證碼是否為空、驗證碼是否正確、用戶是否鎖定、用戶是否被禁用等校驗;責任鏈的另一個應用場景:SpringSecurity對請求過濾 FilterChainProxy

責任鏈處理類

責任鏈之前傳遞數據類

public class UserWrapper {/*** 數據庫用戶實體*/private AuthUser user;/*** 用戶登錄參數*/private LoginBo loginBo;/*** redis操作實例*/private RedisTemplate redisTemplate;public UserWrapper() {}public UserWrapper(AuthUser user, LoginBo loginBo, RedisTemplate redisTemplate) {this.user = user;this.loginBo = loginBo;this.redisTemplate = redisTemplate;} }

責任鏈抽象接口

public abstract class UserLoginCheckFilter {/*** 下一個處理類*/private UserLoginCheckFilter nextFilter;public UserLoginCheckFilter(UserLoginCheckFilter userLoginCheckFilter) {this.nextFilter = userLoginCheckFilter;}public UserLoginCheckFilter getNextFilt er() {return this.nextFilter;}/*** 執行處理方法** @param userWrapper* @return*/public abstract boolean process(UserWrapper userWrapper); }

用戶是否存在檢查處理類

public class NullUserCheckFilter extends UserLoginCheckFilter {public NullUserCheckFilter(UserLoginCheckFilter userLoginCheckFilter) {super(userLoginCheckFilter);}@Overridepublic UserLoginCheckFilter getNextFilter() {return super.getNextFilter();}/*** 判斷登錄用戶是否為空** @param userWrapper* @return*/@Overridepublic final boolean process(UserWrapper userWrapper) {if (null == userWrapper.getUser()) {throw new MixException(USER_NOT_EXIST);}return getNextFilter() == null ? true : getNextFilter().process(userWrapper);} }

密碼校驗處理類

public class PasswordCheckFilter extends UserLoginCheckFilter {public PasswordCheckFilter(UserLoginCheckFilter userLoginCheckFilter) {super(userLoginCheckFilter);}@Overridepublic UserLoginCheckFilter getNextFilter() {return super.getNextFilter();}/*** 判斷密碼是否正確** @param userWrapper* @return*/@Overridepublic final boolean process(UserWrapper userWrapper) {try{if (!PasswordUtil.base64Equal(userWrapper.getLoginBo().getCredential(),userWrapper.getUser().getPassword(),userWrapper.getUser().getSalt())) {throw new MixException(BusinessErrorEnum.PASSWORD_ERROR);}}catch (IllegalArgumentException e){throw new MixException(BusinessErrorEnum.BASE64_PASSWORD_ERROR);}return getNextFilter() == null ? true : getNextFilter().process(userWrapper);} }

驗證碼為空處理類

public class NullCodeCheckFilter extends UserLoginCheckFilter {public NullCodeCheckFilter(UserLoginCheckFilter userLoginCheckFilter) {super(userLoginCheckFilter);}@Overridepublic UserLoginCheckFilter getNextFilter() {return super.getNextFilter();}/*** 判斷短信驗證碼是否為空** @param userWrapper* @return*/@Overridepublic final boolean process(UserWrapper userWrapper) {String code = (String) userWrapper.getRedisTemplate().opsForValue().get(RedisConstant.AUTH_MESSAGE_CODE_KEY + userWrapper.getLoginBo().getLoginName());if (null == code) {throw new MixException(BusinessErrorEnum.MESSAGE_CODE_EXPIRE);}return getNextFilter() == null ? true : getNextFilter().process(userWrapper);} }

短信驗證碼校驗處理類

public class ErrorCodeCheckFilter extends UserLoginCheckFilter {public ErrorCodeCheckFilter(UserLoginCheckFilter userLoginCheckFilter) {super(userLoginCheckFilter);}@Overridepublic UserLoginCheckFilter getNextFilter() {return super.getNextFilter();}/*** 判斷短信驗證碼是否錯誤** @param userWrapper* @return*/@Overridepublic final boolean process(UserWrapper userWrapper) {/*** 查詢短信code*/String code = (String) userWrapper.getRedisTemplate().opsForValue().get(RedisConstant.AUTH_MESSAGE_CODE_KEY + userWrapper.getLoginBo().getLoginName());/*** 判斷短信驗證碼是否匹配*/if (!code.equals(userWrapper.getLoginBo().getCredential())) {/*** 獲取輸入錯誤驗證碼次數,如果大于3次,需要返回給前端錯誤次數過多,請求圖片驗證碼*/String key = RedisConstant.AUTH_MESSAGE_CODE_COUNT_KEY + userWrapper.getLoginBo().getLoginName();Integer errorCodeCount = (Integer) userWrapper.getRedisTemplate().opsForValue().get(key);if (null != errorCodeCount && errorCodeCount.intValue() >= RedisConstant.AUTH_MESSAGE_CODE_ERROR_COUNT) {throw new MixException(BusinessErrorEnum.ERROR_CODE_MANY);} else {throw new MixException(BusinessErrorEnum.MESSAGE_CODE_ERROR);}}/*** 短信驗證碼正確,繼續執行后面的處理*/return getNextFilter() == null ? true : getNextFilter().process(userWrapper);} }

責任鏈調用

手機驗證碼登錄處理邏輯

UserLoginCheckFilter userLoginCheckFilter = new NullUserCheckFilter(new NullCodeCheckFilter(new ErrorCodeCheckFilter(new LockedUserCheckFilter(new DisableUserCheckFilter(null))))); boolean loginResult = userLoginCheckFilter.process(new UserWrapper(user, loginBo, redisTemplate)); if(loginResult){// 登錄成功處理邏輯 }

?

用戶名密碼登錄處理邏輯

UserLoginCheckFilter userLoginCheckFilter = new NullUserCheckFilter(new LockedUserCheckFilter(new DisableUserCheckFilter(new PasswordCheckFilter(null)))); boolean loginResult = userLoginCheckFilter.process(new UserWrapper(user, loginBo, redisTemplate)); if(loginResult){// 登錄成功處理邏輯 }

?

總結

以上是生活随笔為你收集整理的责任链模式以及应用场景的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产91在线免费 | 性一交一乱一透一a级 | 国产真人毛片 | 牛牛精品一区二区 | 日韩精品无码一本二本三本色 | 7mav视频 | 国产精品毛片久久久久久 | 色乱码一区二区三在线看 | 一区二区精品区 | 天堂网免费视频 | 欧美日本一道本 | 亚洲精品白浆高清久久久久久 | 国产精品免费一区二区 | 女人一区二区三区 | 国产91在线播放精品91 | 无码aⅴ精品一区二区三区 精品久久在线 | 五月天综合久久 | 日本少妇bbwbbw精品 | 黄网页在线观看 | 91久久国产综合久久 | 国产乱码精品一区二区三 | 中文字幕免费在线 | 日批视屏 | 91精品久久久久久久久中文字幕 | 操大逼网站| 美日韩一二三区 | 潘金莲裸体一级淫片视频 | 青青草原在线免费观看视频 | 欧美人体一区二区三区 | 少妇高潮惨叫久久久久久 | 男男gay羞辱feet贱奴vk | 一级黄色在线 | 欧美成人图区 | 久久久国产精品视频 | 亚洲国产成人91精品 | 久久精品久久国产 | 中文字幕永久在线观看 | 色老头综合 | 亚洲久久久 | 少妇高潮一区二区三区99 | 龚玥菲一级淫片 | 国产午夜精品一区二区三区嫩草 | 国精产品一品二品国精品69xx | 呦呦在线视频 | av黄色在线免费观看 | 欧美另类69xxxx | 欧美综合激情网 | 免费高清黄色 | 久久97精品久久久久久久不卡 | 青草视屏 | 色福利在线 | 欧美一区二区三区成人久久片 | 亚洲色成人www永久在线观看 | 91成人精品一区在线播放 | 韩国中文字幕hd久久精品 | 91九色网站 | 免费久草视频 | 四虎影视av | 一区二区三区四区在线 | av手机免费在线观看 | 成人做爰69片免费 | 久久网一区 | 国产性生活片 | 无码少妇精品一区二区免费动态 | 国产精品自拍区 | 一级作爱片| 性欧美在线视频观看 | 国产精品午夜在线观看 | 一级视频在线播放 | 白丝校花扒腿让我c | 国产一区免费观看 | 黄瓜视频在线观看 | 在线视频午夜 | 直接看的av | xzjzjzjzjzj欧美大片| 青青草成人影视 | www视频免费在线观看 | 国产福利观看 | 黑人3p波多野结衣在线观看 | 麻豆视频免费观看 | 色一情一区二 | 大战熟女丰满人妻av | 天海翼一区 | 亚洲网站在线播放 | 亚洲人视频在线 | 亚洲激情自拍 | 精品久久一区 | 午夜精品成人毛片非洲 | 亚洲一区色 | 秘密基地动漫在线观看免费 | 在线免费看黄av | 伊人88 | 亚洲精品黄色 | 99免费精品视频 | 91黄色视屏 | 国产成人a亚洲精品 | fc2ppv色の美マンに中出し | 亚洲痴女 | 亚洲av综合色区无码一区爱av |