千家信息网

Java如何实现OAuth2.0授权系统的验证码功能

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"Java如何实现OAuth2.0授权系统的验证码功能"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,
千家信息网最后更新 2026年11月03日Java如何实现OAuth2.0授权系统的验证码功能

本篇内容介绍了"Java如何实现OAuth2.0授权系统的验证码功能"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.集成EasyCaptcha:

         com.github.whvcse      easy-captcha      1.6.2   

2.生成验证码并保存到Redis中:

/**     * 验证码     *     * @return     */    @GetMapping("/captcha")    public Result captcha() {         String captchaKey = "captcha_" + UUID.randomUUID();        // 三个参数分别为宽、高、位数        SpecCaptcha captcha = new SpecCaptcha(130, 60, 4);        // 设置字体 有默认字体,可以不用设置        captcha.setFont(new Font("Verdana", Font.PLAIN, 32));        // 设置类型,纯数字、纯字母、字母数字混合        captcha.setCharType(Captcha.TYPE_ONLY_NUMBER);        log.info("key: [{}] ,code: [{}]", captchaKey, captcha.text());        // 存入Redis ,默认两分钟        redisBaseUtil.set(captchaKey, captcha.text(), 2, TimeUnit.MINUTES);        Map map = new HashMap<>(4);        map.put("captchaKey", captchaKey);        map.put("image", captcha.toBase64());        return Result.success(map);     }

3. 校验验证码的Filter:

package com.hanxiaozhang.filter; import com.hanxiaozhang.constant.Constant;import com.hanxiaozhang.redis.util.RedisUtil;import com.hanxiaozhang.result.ResultCode;import com.hanxiaozhang.result.Result;import com.hanxiaozhang.util.JsonUtil;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest;import java.util.Map; /** * 〈一句话功能简述〉
* 〈验证码过滤器〉 * * @author hanxinghua * @create 2021/4/4 * @since 1.0.0 */@Slf4j@Componentpublic class CaptchaFilter extends ZuulFilter { @Autowired private RedisUtil redisBaseUtil; @Override public String filterType() { return FilterConstants.PRE_TYPE; } @Override public int filterOrder() { return 0; } @Override public boolean shouldFilter() { return true; } @Override public Object run() { RequestContext currentContext = RequestContext.getCurrentContext(); HttpServletRequest serverHttpRequest = currentContext.getRequest(); String uri = serverHttpRequest.getRequestURI(); if (uri.contains("/oauth/token")) { String method = serverHttpRequest.getMethod(); // 处理跨域Post发送两次请求 if (Constant.OPTIONS.equals(method)) { return null; } Map parameterMap = serverHttpRequest.getParameterMap(); String[] captchaKeys = null, captchaCodes = null; if (!parameterMap.isEmpty() && (captchaKeys = parameterMap.get("captcha_key")) != null && (captchaCodes = parameterMap.get("captcha_code")) != null) { String captchaKey = captchaKeys[0]; String captchaCode = captchaCodes[0]; log.info("Request Captcha Parameters: key: [{}] ,code: [{}]", captchaKey, captchaCode); String redisCaptchaCode = redisBaseUtil.get(captchaKey); String responseBody = null; if (redisCaptchaCode == null) { responseBody = JsonUtil.beanToJson(Result.error(ResultCode.LOGIN_CAPTCHA_EXPIRE)); } else if (!captchaCode.trim().equalsIgnoreCase(redisCaptchaCode)) { responseBody = JsonUtil.beanToJson(Result.error(ResultCode.LOGIN_CAPTCHA_ERROR)); } if (responseBody != null) { currentContext.setSendZuulResponse(false); currentContext.setResponseStatusCode(200); currentContext.getResponse().setContentType(Constant.APP_JSON_UTF_8); log.info("Response Parameters: [{}]", responseBody); currentContext.setResponseBody(responseBody); } } } return null; }}

4.使用,这里使用《Idea中HTTP Client请求测试工具》:

4.1 获取验证码:

GET http://localhost/api/system/captcha

4.2 校验验证码:

POST  http://localhost/api/system/oauth/token?username={{username}}&password={{password}}&grant_type=password&scope={{scope}}&client_id={{client_id}}&client_secret={{client_secret}}&captcha_key=captcha_23cacfe5-2751-44af-a34d-5e795caeb46a&captcha_code=5594

"Java如何实现OAuth2.0授权系统的验证码功能"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

验证 功能 系统 内容 字体 字母 数字 更多 知识 实用 学有所成 接下来 一句话 三个 不用 位数 参数 困境 实际 工具 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网是第几次科技革命的成果 互联网科技公司电话 善班互联网科技 互联网金融科技平台 互联网科技咨询 四个字互联网科技公司取名 上海电发互联网科技有限公司 西藏七维空间互联网科技有限公司 宁夏科技产业互联网案例 昭通互联网科技选哪家 国大互联网教育科技有限公司工作 广州新华互联网科技学校电竞方面 佛山市翊博互联网络科技有限公司 卓翼科技产业互联网合作 群盈汇互联网科技有限公司 互联网第三次科技革命特征 云南省自由互联网科技有限公司 江苏互联网智能科技软件 互联网对科技影响 互联网科技自媒体灵感 互联网科技战争 科技类互联网 猫创互联网科技 齐家互联网科技有限公司 居家互联网科技有限公司 北京华百购互联网科技有限公司 互联网科技与管理 新氧科技和美国互联网有关系吗 福仕德教育科技互联网 科技互联网专业务虚会材料
0