欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot+Hutool實現(xiàn)圖片驗證碼的示例代碼

 更新時間:2024年01月15日 10:02:38   作者:彭于晏689  
圖片驗證碼在注冊、登錄、交易、交互等各類場景中都發(fā)揮著巨大作用,本文主要介紹了SpringBoot+Hutool實現(xiàn)圖片驗證碼的示例代碼,具有一定的參考價值,感興趣的可以了解一下

圖片驗證碼在注冊、登錄、交易、交互等各類場景中都發(fā)揮著巨大作用,能夠防止操作者利用機器進行暴力破解、惡意注冊、濫用服務、批量化操作和自動發(fā)布等行為。

在這里插入圖片描述

創(chuàng)建一個實體類封裝,給前端返回的驗證碼數(shù)據(jù):

@Data
public class ValidateCodeVo {

    private String codeKey ;        // 驗證碼的key
    private String codeValue ;      // 圖片驗證碼對應的字符串數(shù)據(jù)

}

業(yè)務層代碼實現(xiàn):

public interface ValidateCodeService {

    // 獲取驗證碼圖片
    public abstract ValidateCodeVo generateValidateCode();

}
@Service
public class ValidateCodeServiceImpl implements ValidateCodeService {
?
    @Autowired
    private RedisTemplate<String , String> redisTemplate ;
?
    @Override
    public ValidateCodeVo generateValidateCode() {
?
        // 使用hutool工具包中的工具類生成圖片驗證碼
        //參數(shù):寬  高  驗證碼位數(shù) 干擾線數(shù)量
        CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(150, 48, 4, 20);
        String codeValue = circleCaptcha.getCode();
        String imageBase64 = circleCaptcha.getImageBase64();
?
        // 生成uuid作為圖片驗證碼的key
        String codeKey = UUID.randomUUID().toString().replace("-", "");
?
        // 將驗證碼存儲到Redis中
        redisTemplate.opsForValue().set("user:login:validatecode:" + codeKey , codeValue , 5 , TimeUnit.MINUTES);
?
        // 構建響應結果數(shù)據(jù)
        ValidateCodeVo validateCodeVo = new ValidateCodeVo() ;
        validateCodeVo.setCodeKey(codeKey);
        validateCodeVo.setCodeValue("data:image/png;base64," + imageBase64);
?
        // 返回數(shù)據(jù)
        return validateCodeVo;
    }
?
}

在Controller中添加獲取驗證碼接口方法:

@Autowired
private ValidateCodeService validateCodeService;

@GetMapping(value = "/generateValidateCode")
public Result<ValidateCodeVo> generateValidateCode() {
    ValidateCodeVo validateCodeVo = validateCodeService.generateValidateCode();
    return Result.build(validateCodeVo , ResultCodeEnum.SUCCESS) ;
}

在登錄的業(yè)務層實現(xiàn)驗證碼校驗:

 /**
     * 用戶登錄
     * @param loginDto
     * @return
     */
    @Override
    public LoginVo login(LoginDto loginDto) {
        //獲取輸入的驗證碼和存儲到redis的key名稱
        String captcha = loginDto.getCaptcha();
        String key = loginDto.getCodeKey();

        //根據(jù)獲取的redis的key 查詢redis里面存儲的驗證碼
        String redisCode = redisTemplate.opsForValue().get("user:validate" + key);

        // 比較輸入的和redis存儲驗證碼是否一致
        if(StrUtil.isEmpty(redisCode) || !StrUtil.equalsIgnoreCase(redisCode,captcha)){
            //提示用戶,校驗失敗
            throw new GuiguException(ResultCodeEnum.VALIDATECODE_ERROR);
        }

        // 如果一致,刪除redis里面驗證碼
        redisTemplate.delete("user:validate" + key);

        // 1.獲取提交的用戶名
        String userName = loginDto.getUserName();

        // 2.根據(jù)用戶名查詢用戶表
        SysUser sysUser = sysUserMapper.selectUserInfoByUserName(userName);

        // 3.如果根據(jù)用戶名查不到對應的信息,用戶不存在,返回錯誤信息
        if(sysUser == null){
            //throw new RuntimeException("用戶名不存在");
            throw new GuiguException(ResultCodeEnum.LOGIN_ERROR);
        }

        // 4.根據(jù)用戶名查詢用戶信息,用戶存在
        // 5.獲取輸入的密碼,比較輸入的密碼和數(shù)據(jù)庫的密碼是否一致
        String database_assword = sysUser.getPassword();
        // 把輸入的密碼進行加密 再比較數(shù)據(jù)庫的密碼
        String input_password = DigestUtils.md5DigestAsHex(loginDto.getPassword().getBytes());

        //比較
        if(!input_password.equals(database_assword)){
//            throw new RuntimeException("密碼不正確");
            throw new GuiguException(ResultCodeEnum.LOGIN_ERROR);
        }

        // 6.如果密碼一致,登陸成功,如果你密碼不一致登陸失敗
        // 7.登陸成功,生產(chǎn)用戶的唯一標識token
        String token = UUID.randomUUID().toString().replaceAll("-", "");

        // 8.把登陸成功的用戶信息放到redis里面
        // key:token value:用戶信息

        redisTemplate.opsForValue().set("user:login"+token,JSON.toJSONString(sysUser),7, TimeUnit.DAYS);
        // 9.返回loginvo對象
        LoginVo loginVo = new LoginVo();
        loginVo.setToken(token);
        return loginVo;
    }

到此這篇關于SpringBoot+Hutool實現(xiàn)圖片驗證碼的示例代碼的文章就介紹到這了,更多相關SpringBoot Hutool圖片驗證碼內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • 詳解Java中AbstractMap抽象類

    詳解Java中AbstractMap抽象類

    本篇文章給大家詳細介紹了Java集合中的AbstractMap抽象類的相關用法以及知識點總結,需要的朋友參考下。
    2018-03-03
  • 解決java連接虛擬機Hbase無反應的問題

    解決java連接虛擬機Hbase無反應的問題

    這篇文章主要介紹了解決java連接虛擬機Hbase無反應的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java基本知識點之變量和數(shù)據(jù)類型

    Java基本知識點之變量和數(shù)據(jù)類型

    這篇文章主要給大家介紹了關于Java基本知識點之變量和數(shù)據(jù)類型的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • SpringMVC使用MultipartFile實現(xiàn)文件上傳

    SpringMVC使用MultipartFile實現(xiàn)文件上傳

    這篇文章主要為大家詳細介紹了SpringMVC使用MultipartFile實現(xiàn)文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • SpringBoot如何解析參數(shù)的深入理解

    SpringBoot如何解析參數(shù)的深入理解

    這篇文章主要給大家介紹了關于SpringBoot是如何解析參數(shù)的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用SpringBoot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • springboot整合shiro之thymeleaf使用shiro標簽的方法

    springboot整合shiro之thymeleaf使用shiro標簽的方法

    Thymeleaf 是一個跟 Velocity、FreeMarker 類似的模板引擎,它可以完全替代 JSP ,這篇文章主要介紹了springboot整合shiro之thymeleaf使用shiro標簽的相關知識,需要的朋友可以參考下
    2021-10-10
  • Spring學習筆記3之消息隊列(rabbitmq)發(fā)送郵件功能

    Spring學習筆記3之消息隊列(rabbitmq)發(fā)送郵件功能

    這篇文章主要介紹了Spring學習筆記3之消息隊列(rabbitmq)發(fā)送郵件功能的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • java之super關鍵字用法實例解析

    java之super關鍵字用法實例解析

    這篇文章主要介紹了java之super關鍵字用法實例解析,較為詳細的分析了super關鍵字的用法及內存分布,需要的朋友可以參考下
    2014-09-09
  • 教你在一分鐘之內理解Java Lambda表達式并學會使用

    教你在一分鐘之內理解Java Lambda表達式并學會使用

    今天給大家?guī)У奈恼率荍ava8新特性的相關知識,文章圍繞著如何在一分鐘之內理解Java Lambda表達式并學會使用展開,文中有非常詳細的介紹,需要的朋友可以參考下
    2021-06-06
  • SpringBoot使用Jasypt對配置文件和數(shù)據(jù)庫密碼加密

    SpringBoot使用Jasypt對配置文件和數(shù)據(jù)庫密碼加密

    在做數(shù)據(jù)庫敏感信息保護時,應加密存儲,本文就來介紹一下SpringBoot使用Jasypt對配置文件和數(shù)據(jù)庫密碼加密,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02

最新評論