Java如何实现OAuth2.0授权系统的验证码功能
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,本篇内容介绍了"Java如何实现OAuth2.0授权系统的验证码功能"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,
千家信息网最后更新 2025年11月11日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安全错误
数据库的锁怎样保障安全
计算机网络安全笔记
网络技术证书培训机构
软件开发派遣制稳定吗
什么是公安y数据库
郑州改造家网络技术有限公司
网络技术专科院校
达梦数据库文件解析失败
网络安全与大数据方向那个好
国产数据库系统市场占有率
网络技术周记五十
centos服务器管理
农业社数据库首页
忠县新华软件开发培训
服务器主板能装苹果吗
安装oracle数据库教程
数据库实体文件储存在哪个文件夹
服务器智能监控管理结束
浙江服务器机房按需定制服务器
护苗网络安全课班队课教案
运城掌上淘网络技术公司
数据库 数据标准化
无线打印服务器信号灯一直闪老款
网络安全漫画大赛获奖
网络技术加剧从众心理
募格网络技术
服务器内存和普通
华为服务器更换硬盘
松江区质量软件开发管理制度
九月份网络安全
乌兰察布市连阡陌网络技术