您好,登錄后才能下訂單哦!
本篇內容主要講解“如何使用基于易水公共組件的驗證碼”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何使用基于易水公共組件的驗證碼”吧!
先引入相關依賴
<dependency> <groupId>com.yishuifengxiao.common</groupId> <artifactId>common-spring-boot-starter</artifactId> <version>4.1.2</version> </dependency>
將驗證碼工具注入到需要使用到驗證碼的地方
注入代碼如下:
@Autowired private CodeProcessorHolder codeProcessorHolder;
在注入一個驗證碼工具后,通過以下代碼即可快速生成一個圖形驗證碼。 具體的示例代碼如下:
@GetMapping("/code/image") @ResponseBody public Response<String> image(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參數存儲起來,因為在校驗驗證碼時需要用到。
驗證圖形驗證碼的示例代碼如下:
@GetMapping("/image/validate") @ResponseBody public Response<String> validate(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參數的值應該與請求中圖形驗證碼的url中的image參數的值保持一致。
特殊提示:對于前后端部署在一起的單體應用,上述兩個請求中的image參數都可以省略掉。
除此之外,圖形驗證碼相關的配置有
# 驗證碼的長度,默認為4 yishuifengxiao.code.image.length=4 # 驗證碼的失效時間,單位秒,默認為300s yishuifengxiao.code.image.expireIn=300 # 驗證碼是否包含字母,默認包含 yishuifengxiao.code.image.isContainLetter=true # 驗證碼是否包含數字,默認包含 yishuifengxiao.code.image.isContainNumber=true # 驗證碼的請求參數 yishuifengxiao.code.image.codeKey=image # 驗證碼對應的值的參數 yishuifengxiao.code.image.codeValue=image_code # 圖形驗證碼的圖形寬度 yishuifengxiao.code.image.width=70 # 圖形驗證碼的圖形高度 yishuifengxiao.code.image.height=28
<b>注意:</b>
在生成驗證碼和驗證驗證碼的請求中,請求參數中的image
參數由yishuifengxiao.code.image.codeKey
屬性,image_code
參數由yishuifengxiao.code.image.codeValue
屬性決定。在某些極端情況下,可以通過這兩個配置修改請求參數。
如果服務是部署在阿里云ECS上面,由于阿里云默認關閉了25號端口,因此使用默認的端口發送郵件時會導致郵件驗證碼發送失敗,因此需要提交工單到阿里云申請開啟25號端口,或者使用465端口。
在使用郵箱驗證碼時,需要先進行下述配置:
在項目中導入郵件發送相關的依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
在項目的配置文件中加入郵件發送相關的配置屬性
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
如果不加入以上配置,在使用郵件驗證碼時會提示 【驗證碼處理器不存在】,且不能正確發送郵件驗證碼。
【注意】在阿里云ECS服務器上,25端口默認是關閉的,因此最好配置465端口
郵件驗證碼的發送代碼與圖形驗證碼的發送方法基本一致,只需要將CodeType.IMAGE
改成CodeType.EMAIL
即可。
@GetMapping("/code/email") @ResponseBody public Response<String> email(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=目標郵箱地址
發送郵箱驗證碼了。
示例代碼如下:
@GetMapping("/email/validate") @ResponseBody public Response<String> validate(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 # 驗證碼是否包含數字,默認包含 yishuifengxiao.code.email.isContainNumber=true # 驗證碼的請求參數 yishuifengxiao.code.email.codeKey=email # 驗證碼對應的值的參數 yishuifengxiao.code.email.codeValue=email_code
類似地,驗證碼的請求參數中的email
參數由yishuifengxiao.code.email.codeKey
屬性,email_code
參數由yishuifengxiao.code.email.codeValue
屬性決定。
在郵件驗證碼功能中,組件對郵箱驗證碼做了一個缺省性實現,在用戶對郵件驗證碼的格式有自定義需求時,可以通過在spring中注入一個名為emailCodeSender
的實例來實現自己的模板內容。
示例代碼如下
@Component("emailCodeSender") public class EmailCodeSender implements CodeSender<EmailCode> { @Override public void send(String target, EmailCode emailCode, CodeType codeType){ //實現自己的發送邏輯 } }
由于短信驗證碼的特殊性,不同的短信提供商有不同的發送接口,因此在使用短信驗證碼功能之前,需要完成自己的名為 smsCodeSender
短信發送器,并將其注入到spring上下文之中。
示例代碼如下
@Component("smsCodeSender") public class SmsCodeSender implements CodeSender<SmsCode> { @Override public void send(String target, EmailCode emailCode, CodeType codeType){ //實現自己的發送邏輯 } }
在完成前置配置之后,即可發送短信驗證碼了。
示例代碼如下
@GetMapping("/code/sms") @ResponseBody public Response<String> sms(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=目標手機號
發送郵箱驗證碼了。
示例代碼如下:
@GetMapping("/sms/validate") @ResponseBody public Response<String> validate(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 # 驗證碼是否包含數字,默認包含 yishuifengxiao.code.sms.isContainNumber=true # 驗證碼的請求參數 yishuifengxiao.code.sms.codeKey=phone # 驗證碼對應的值的參數 yishuifengxiao.code.sms.codeValue=phone_code
類似地,驗證碼的請求參數中的phone
參數由yishuifengxiao.code.sms.codeKey
屬性,phone_code
參數由yishuifengxiao.code.sms.codeValue
屬性決定。
驗證碼的更多用法請參見一下資源
到此,相信大家對“如何使用基于易水公共組件的驗證碼”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。