溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用基于易水公共組件的驗證碼

發(fā)布時間:2021-10-14 12:03:11 來源:億速云 閱讀:135 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“如何使用基于易水公共組件的驗證碼”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“如何使用基于易水公共組件的驗證碼”吧!

快速啟動

  1. 先引入相關(guān)依賴

<dependency>
    <groupId>com.yishuifengxiao.common</groupId>
    <artifactId>common-spring-boot-starter</artifactId>
    <version>4.1.2</version>
</dependency>
  1. 將驗證碼工具注入到需要使用到驗證碼的地方

注入代碼如下:

@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=唯一的隨機值

獲取圖形驗證碼了。

在上述請求中,用戶應(yīng)該將image參數(shù)存儲起來,因為在校驗驗證碼時需要用到。

驗證圖形驗證碼

驗證圖形驗證碼的示例代碼如下:

    @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=驗證碼內(nèi)容

來判斷驗證碼是否正確。

【注意】上述請求中image參數(shù)的值應(yīng)該與請求中圖形驗證碼的url中的image參數(shù)的值保持一致。

特殊提示:對于前后端部署在一起的單體應(yīng)用,上述兩個請求中的image參數(shù)都可以省略掉。

配置參數(shù)

除此之外,圖形驗證碼相關(guān)的配置有

# 驗證碼的長度,默認為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
# 驗證碼對應(yīng)的值的參數(shù)
yishuifengxiao.code.image.codeValue=image_code
# 圖形驗證碼的圖形寬度
yishuifengxiao.code.image.width=70
# 圖形驗證碼的圖形高度
yishuifengxiao.code.image.height=28

<b>注意:</b>

在生成驗證碼和驗證驗證碼的請求中,請求參數(shù)中的image參數(shù)由yishuifengxiao.code.image.codeKey屬性,image_code參數(shù)由yishuifengxiao.code.image.codeValue屬性決定。在某些極端情況下,可以通過這兩個配置修改請求參數(shù)。

如果服務(wù)是部署在阿里云ECS上面,由于阿里云默認關(guān)閉了25號端口,因此使用默認的端口發(fā)送郵件時會導(dǎo)致郵件驗證碼發(fā)送失敗,因此需要提交工單到阿里云申請開啟25號端口,或者使用465端口。

郵件驗證碼

在使用郵箱驗證碼時,需要先進行下述配置:

  1. 在項目中導(dǎo)入郵件發(fā)送相關(guān)的依賴

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>
  1. 在項目的配置文件中加入郵件發(fā)送相關(guān)的配置屬性

spring.mail.default-encoding=UTF-8
spring.mail.host=郵箱服務(wù)器
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服務(wù)器上,25端口默認是關(guān)閉的,因此最好配置465端口

發(fā)送郵件驗證碼

郵件驗證碼的發(fā)送代碼與圖形驗證碼的發(fā)送方法基本一致,只需要將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=目標郵箱地址

發(fā)送郵箱驗證碼了。

驗證郵箱驗證碼

示例代碼如下:

    @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=驗證碼

來驗證了。

配置參數(shù)

除此之外,組件還提供了一些額外的配置

# 驗證碼的長度,默認為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
# 驗證碼對應(yīng)的值的參數(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)自己的模板內(nèi)容。

示例代碼如下

@Component("emailCodeSender")
public class EmailCodeSender implements CodeSender<EmailCode> {
    
    @Override
	public void  send(String target, EmailCode emailCode, CodeType codeType){
        //實現(xiàn)自己的發(fā)送邏輯
    }
}

短信驗證碼

由于短信驗證碼的特殊性,不同的短信提供商有不同的發(fā)送接口,因此在使用短信驗證碼功能之前,需要完成自己的名為 smsCodeSender短信發(fā)送器,并將其注入到spring上下文之中。

示例代碼如下

@Component("smsCodeSender")
public class SmsCodeSender implements CodeSender<SmsCode> {
    
    @Override
	public void  send(String target, EmailCode emailCode, CodeType codeType){
        //實現(xiàn)自己的發(fā)送邏輯
    }
}

發(fā)送短信驗證碼

在完成前置配置之后,即可發(fā)送短信驗證碼了。

示例代碼如下

    @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=目標手機號

發(fā)送郵箱驗證碼了。

驗證短信驗證碼

示例代碼如下:

    @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=驗證碼

來驗證了。

參數(shù)配置

# 驗證碼的長度,默認為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
# 驗證碼對應(yīng)的值的參數(shù)
yishuifengxiao.code.sms.codeValue=phone_code

類似地,驗證碼的請求參數(shù)中的phone參數(shù)由yishuifengxiao.code.sms.codeKey屬性,phone_code參數(shù)由yishuifengxiao.code.sms.codeValue屬性決定。

驗證碼的更多用法請參見一下資源

到此,相信大家對“如何使用基于易水公共組件的驗證碼”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI