本篇內容主要講解“如何使用基于易水公共組件的驗證碼”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何使用基于易水公共組件的驗證碼”吧!
創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、定興網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、HTML5建站、成都商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設、外貿網(wǎng)站建設、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為定興等各大城市提供網(wǎng)站開發(fā)制作服務。
先引入相關依賴
com.yishuifengxiao.common common-spring-boot-starter 4.1.2
將驗證碼工具注入到需要使用到驗證碼的地方
注入代碼如下:
@Autowired private CodeProcessorHolder codeProcessorHolder;
在注入一個驗證碼工具后,通過以下代碼即可快速生成一個圖形驗證碼。 具體的示例代碼如下:
@GetMapping("/code/image") @ResponseBody public Responseimage(HttpServletRequest request, HttpServletResponse response){ try { codeProcessorHolder.findValidateCodeProcessor(CodeType.IMAGE).create(new ServletWebRequest(request,response)); } catch (ValidateException e) { return Response.error(e.getMessage()); } return Response.suc(); }
在以上代碼后,用戶即可通過
http://ip:port/code/image?image=唯一的隨機值
獲取圖形驗證碼了。
在上述請求中,用戶應該將image參數(shù)存儲起來,因為在校驗驗證碼時需要用到。
驗證圖形驗證碼的示例代碼如下:
@GetMapping("/image/validate") @ResponseBody public Responsevalidate(HttpServletRequest request, HttpServletResponse response){ try { codeProcessorHolder.findValidateCodeProcessor(CodeType.IMAGE).validate(new ServletWebRequest(request,response)); } catch (ValidateException e) { return Response.error(e.getMessage()); } return Response.suc(); }
用戶在驗證圖形驗證碼時,即可用過
http://ip:port/image/validate?image=唯一的隨機值&image_code=驗證碼內容
來判斷驗證碼是否正確。
【注意】上述請求中image參數(shù)的值應該與請求中圖形驗證碼的url中的image參數(shù)的值保持一致。
特殊提示:對于前后端部署在一起的單體應用,上述兩個請求中的image參數(shù)都可以省略掉。
除此之外,圖形驗證碼相關的配置有
# 驗證碼的長度,默認為4 yishuifengxiao.code.image.length=4 # 驗證碼的失效時間,單位秒,默認為300s yishuifengxiao.code.image.expireIn=300 # 驗證碼是否包含字母,默認包含 yishuifengxiao.code.image.isContainLetter=true # 驗證碼是否包含數(shù)字,默認包含 yishuifengxiao.code.image.isContainNumber=true # 驗證碼的請求參數(shù) yishuifengxiao.code.image.codeKey=image # 驗證碼對應的值的參數(shù) yishuifengxiao.code.image.codeValue=image_code # 圖形驗證碼的圖形寬度 yishuifengxiao.code.image.width=70 # 圖形驗證碼的圖形高度 yishuifengxiao.code.image.height=28
注意:
在生成驗證碼和驗證驗證碼的請求中,請求參數(shù)中的image
參數(shù)由yishuifengxiao.code.image.codeKey
屬性,image_code
參數(shù)由yishuifengxiao.code.image.codeValue
屬性決定。在某些極端情況下,可以通過這兩個配置修改請求參數(shù)。
如果服務是部署在阿里云ECS上面,由于阿里云默認關閉了25號端口,因此使用默認的端口發(fā)送郵件時會導致郵件驗證碼發(fā)送失敗,因此需要提交工單到阿里云申請開啟25號端口,或者使用465端口。
在使用郵箱驗證碼時,需要先進行下述配置:
在項目中導入郵件發(fā)送相關的依賴
org.springframework.boot spring-boot-starter-mail
在項目的配置文件中加入郵件發(fā)送相關的配置屬性
spring.mail.default-encoding=UTF-8 spring.mail.host=郵箱服務器 spring.mail.username=完整的郵箱地址 spring.mail.password=密碼 spring.mail.port=465 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.connectiontimeout=5000 spring.mail.properties.mail.smtp.timeout=3000 spring.mail.properties.mail.smtp.writetimeout=5000 spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory spring.mail.properties.mail.smtp.socketFactory.fallback=false spring.mail.properties.mail.smtp.socketFactory.port=465 spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true
如果不加入以上配置,在使用郵件驗證碼時會提示 【驗證碼處理器不存在】,且不能正確發(fā)送郵件驗證碼。
【注意】在阿里云ECS服務器上,25端口默認是關閉的,因此最好配置465端口
郵件驗證碼的發(fā)送代碼與圖形驗證碼的發(fā)送方法基本一致,只需要將CodeType.IMAGE
改成CodeType.EMAIL
即可。
@GetMapping("/code/email") @ResponseBody public Responseemail(HttpServletRequest request, HttpServletResponse response){ try { codeProcessorHolder.findValidateCodeProcessor(CodeType.EMAIL).create(new ServletWebRequest(request,response)); } catch (ValidateException e) { return Response.error(e.getMessage()); } return Response.suc(); }
加入上述配置以后,即可通過
http://ip:port/code/email?email=目標郵箱地址
發(fā)送郵箱驗證碼了。
示例代碼如下:
@GetMapping("/email/validate") @ResponseBody public Responsevalidate(HttpServletRequest request, HttpServletResponse response){ try { codeProcessorHolder.findValidateCodeProcessor(CodeType.EMAIL).validate(new ServletWebRequest(request,response)); } catch (ValidateException e) { return Response.error(e.getMessage()); } return Response.suc(); }
加入上述配置以后,即可通過
http://ip:port/email/validate?email=目標郵箱地址&email_code=驗證碼
來驗證了。
除此之外,組件還提供了一些額外的配置
# 驗證碼的長度,默認為4 yishuifengxiao.code.email.length=4 # 驗證碼的失效時間,單位秒,默認為1800s yishuifengxiao.code.email.expireIn=1800 # 驗證碼是否包含字母,默認包含 yishuifengxiao.code.email.isContainLetter=true # 驗證碼是否包含數(shù)字,默認包含 yishuifengxiao.code.email.isContainNumber=true # 驗證碼的請求參數(shù) yishuifengxiao.code.email.codeKey=email # 驗證碼對應的值的參數(shù) yishuifengxiao.code.email.codeValue=email_code
類似地,驗證碼的請求參數(shù)中的email
參數(shù)由yishuifengxiao.code.email.codeKey
屬性,email_code
參數(shù)由yishuifengxiao.code.email.codeValue
屬性決定。
在郵件驗證碼功能中,組件對郵箱驗證碼做了一個缺省性實現(xiàn),在用戶對郵件驗證碼的格式有自定義需求時,可以通過在spring中注入一個名為emailCodeSender
的實例來實現(xiàn)自己的模板內容。
示例代碼如下
@Component("emailCodeSender") public class EmailCodeSender implements CodeSender{ @Override public void send(String target, EmailCode emailCode, CodeType codeType){ //實現(xiàn)自己的發(fā)送邏輯 } }
由于短信驗證碼的特殊性,不同的短信提供商有不同的發(fā)送接口,因此在使用短信驗證碼功能之前,需要完成自己的名為 smsCodeSender
短信發(fā)送器,并將其注入到spring上下文之中。
示例代碼如下
@Component("smsCodeSender") public class SmsCodeSender implements CodeSender{ @Override public void send(String target, EmailCode emailCode, CodeType codeType){ //實現(xiàn)自己的發(fā)送邏輯 } }
在完成前置配置之后,即可發(fā)送短信驗證碼了。
示例代碼如下
@GetMapping("/code/sms") @ResponseBody public Responsesms(HttpServletRequest request, HttpServletResponse response){ try { codeProcessorHolder.findValidateCodeProcessor(CodeType.SMS).create(new ServletWebRequest(request,response)); } catch (ValidateException e) { return Response.error(e.getMessage()); } return Response.suc(); }
加入上述配置以后,即可通過
http://ip:port/code/sms?phone=目標手機號
發(fā)送郵箱驗證碼了。
示例代碼如下:
@GetMapping("/sms/validate") @ResponseBody public Responsevalidate(HttpServletRequest request, HttpServletResponse response){ try { codeProcessorHolder.findValidateCodeProcessor(CodeType.SMS).validate(new ServletWebRequest(request,response)); } catch (ValidateException e) { return Response.error(e.getMessage()); } return Response.suc(); }
加入上述配置以后,即可通過
http://ip:port/sms/validate?phone=目標手機號&phone_code=驗證碼
來驗證了。
# 驗證碼的長度,默認為4 yishuifengxiao.code.sms.length=4 # 驗證碼的失效時間,單位秒,默認為300s yishuifengxiao.code.sms.expireIn=300 # 驗證碼是否包含字母,默認包含 yishuifengxiao.code.sms.isContainLetter=true # 驗證碼是否包含數(shù)字,默認包含 yishuifengxiao.code.sms.isContainNumber=true # 驗證碼的請求參數(shù) yishuifengxiao.code.sms.codeKey=phone # 驗證碼對應的值的參數(shù) yishuifengxiao.code.sms.codeValue=phone_code
類似地,驗證碼的請求參數(shù)中的phone
參數(shù)由yishuifengxiao.code.sms.codeKey
屬性,phone_code
參數(shù)由yishuifengxiao.code.sms.codeValue
屬性決定。
驗證碼的更多用法請參見一下資源
到此,相信大家對“如何使用基于易水公共組件的驗證碼”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!