登陆前端代码

<template #append><div class="login-code"><spanclass="login-code-img"@click="refreshCode"v-if="code.type === 'text'">{{ code.value }}</span><img:src="code.src"class="login-code-img"@click="refreshCode"v-else/></div></template>

刷新验证码代码

refreshCode() {this.loginForm.code = "";this.loginForm.randomStr = randomLenNum(this.code.len, true);this.code.type === "text"? (this.code.value = randomLenNum(this.code.len)): (this.code.src = `${this.baseUrl}/code?randomStr=${this.loginForm.randomStr}`);}

验证码配置开关

前端开关

位于website.js中配置validateCode属性

validateCode: true,//是否开启验证码校验

后端开关

位于pig-gateway-dev.yml配置文件

# 不校验验证码终端
gateway:encode-key: 'thanks,pig4cloud'ignore-clients:- test- client

生成验证码

pig-gate-way模块pom.xml

  <!--验证码 源码: https://github.com/pig-mesh/easy-captcha --><dependency><groupId>com.pig4cloud.plugin</groupId><artifactId>captcha-spring-boot-starter</artifactId><version>${captcha.version}</version></dependency>

captcha-spring-boot-starter中对验证码进行了配置,这里不详细展开说明。

基于webflux生成验证码

@Slf4j
@Configuration(proxyBeanMethods = false)
@RequiredArgsConstructor
public class RouterFunctionConfiguration {private final ImageCodeHandler imageCodeHandler;@Beanpublic RouterFunction<ServerResponse> routerFunction() {return RouterFunctions.route(RequestPredicates.path("/code").and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), imageCodeHandler);}}

RouterFunctionConfiguration用来注册一个路由和它的处理程序。

proxyBeanMethods配置类是用来指定@Bean注解标注的方法是否使用代理,默认是true使用代理,直接从IOC容器之中取得对象;如果设置为false,也就是不使用注解,每次调用@Bean标注的方法获取到的对象和IOC容器中的都不一样,是一个新的对象。

Spring 5.2.0+的版本,建议你的配置类均采用Lite模式去做,即显示设置proxyBeanMethods = false。Spring Boot在2.2.0版本(依赖于Spring 5.2.0)起就把它的所有的自动配置类的此属性改为了false,即@Configuration(proxyBeanMethods = false),提高Spring启动速度。

RouterFunction为我们应用程序添加一个新的路由,这个路由需要绑定一个HandlerFunction,做为它的处理程序,里面可以添加业务代码。

ImageCodeHandler

@Slf4j
@RequiredArgsConstructor
public class ImageCodeHandler implements HandlerFunction<ServerResponse> {private static final Integer DEFAULT_IMAGE_WIDTH = 100;private static final Integer DEFAULT_IMAGE_HEIGHT = 40;private final RedisTemplate<String, Object> redisTemplate;@Overridepublic Mono<ServerResponse> handle(ServerRequest serverRequest) {ArithmeticCaptcha captcha = new ArithmeticCaptcha(DEFAULT_IMAGE_WIDTH, DEFAULT_IMAGE_HEIGHT);String result = captcha.text();// 保存验证码信息Optional<String> randomStr = serverRequest.queryParam("randomStr");redisTemplate.setKeySerializer(new StringRedisSerializer());randomStr.ifPresent(s -> redisTemplate.opsForValue().set(CacheConstants.DEFAULT_CODE_KEY + s, result,SecurityConstants.CODE_TIME, TimeUnit.SECONDS));// 转换流信息写出FastByteArrayOutputStream os = new FastByteArrayOutputStream();captcha.out(os);return ServerResponse.status(HttpStatus.OK).contentType(MediaType.IMAGE_JPEG).body(BodyInserters.fromResource(new ByteArrayResource(os.toByteArray())));}}

校验验证码

网关配置

pig-gateway-dev.yml中配置ValidateCodeGatewayFilter

校验验证码

public class ValidateCodeGatewayFilter extends AbstractGatewayFilterFactory {@Overridepublic GatewayFilter apply(Object config) {return (exchange, chain) -> {ServerHttpRequest request = exchange.getRequest();// 终端设置不校验, 直接向下执行String[] clientInfos = WebUtils.getClientId(request);if (filterIgnorePropertiesConfig.getClients().contains(clientInfos[0])) {return chain.filter(exchange);}//校验验证码checkCode(request);return chain.filter(exchange);};}
}

checkCode方法

@SneakyThrowsprivate void checkCode(ServerHttpRequest request) {String code = request.getQueryParams().getFirst("code");if (CharSequenceUtil.isBlank(code)) {throw new ValidateCodeException("验证码不能为空");}String randomStr = request.getQueryParams().getFirst("randomStr");if (CharSequenceUtil.isBlank(randomStr)) {randomStr = request.getQueryParams().getFirst(SecurityConstants.SMS_PARAMETER_NAME);}String key = CacheConstants.DEFAULT_CODE_KEY + randomStr;Object codeObj = redisTemplate.opsForValue().get(key);if (ObjectUtil.isEmpty(codeObj) || !code.equals(codeObj)) {throw new ValidateCodeException("验证码不合法");}redisTemplate.delete(key);}

博客园
腾讯云
掘金
简书

Pig4Cloud之验证码相关推荐

  1. pig4cloud服务架构使用

    进入新公司接触到了源码项目:pig4cloud,目前已经到了v3版本,趁参与项目中记录一下 源码下载:https://gitee.com/log4j/pig 项目组件:nacos(服务注册与发现,配置 ...

  2. Python:尝试对知乎网验证码进行处理

    许多流行的内容管理系统即使加了验证码模块,其众所周知的注册页面也经常会遭到网络 机器人的垃圾注册. 那么,这些网络机器人究,竟是怎么做的呢?既然我们已经,可以成功地识别出保存在电脑上 的验证码了,那么 ...

  3. Django 验证码4.4

    验证码 在用户注册.登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻一些服务器的压力 使用验证码也是一种有效的防止crsf的方法 验证码效果如下图: 验证码视 ...

  4. java爬取验证码图片_JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取)...

    JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取) 发布时间:2018-05-18 16:41, 浏览次数:632 , 标签: JAVA HttpClien ...

  5. 微信小程序获取验证码倒计时

    实现效果图 使用方法: setInterval demo:(如果对 setInterval不了解的可以先百度下) xml 中写一个按钮: <view class="container& ...

  6. android 短信验证码的实现

    公司用的短信验证码是Mob.com 网址:http://www.mob.com 进入网站 注册登录之后 进入后在上面有应用是让选择android还是ios 之类的,点击下载SDK --选择免费短信验证 ...

  7. 为什么很多网站的验证码都设置得肉眼都很难识别?

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 首先来谈谈验证码的机制,验证码作为一种人机识别手段,其终极目的,就是区分正常人和机器的操作.而对于没有验证码的场景,比如用户登陆,则机器可以同时.大 ...

  8. python 生成验证码

    import randomfrom PIL import Image, ImageDraw, ImageFont, ImageFilter _letter_cases = "abcdefgh ...

  9. ThInkPHP验证码不显示,解决方法汇总

    出现ThInkPHP验证码不显示的情况 官方提示如下:如果无法显示验证码,请检查: ① PHP是否已经安装GD库支持: ② 输出之前是否有任何的输出(尤其是UTF8的BOM头信息输出):(打开验证码文 ...

最新文章

  1. java 压缩多个文件_java实现一次性压缩多个文件到zip中的方法示例
  2. 单片机如何使用振动传感器801s_振动传感器如何跟踪测量机器的健康状况
  3. eclipse远程连接hadoop_1个文件,3个类,mapreduce就是这么简单,动手搭建Hadoop(8)...
  4. 在Linux下用netstat查看网络状态、端口状态
  5. root cause of exception single deletion failure
  6. JDK 15中的确切绝对整数
  7. python中复选框取消修改_python – 如何在PySide / PyQt中设置“只读复选框”
  8. 【Mac】Mac下安装MySQL优化工具 percona-toolkit 报错 Error: Failed to download resource openssl@1.1
  9. mayapython开关_Maya Python 简易教程.doc
  10. 怎么选一个合适的手机?需要大内存,价格不太高的?
  11. 2021-3-18全国个人所得税 完税证明开具 最新 其它经验都过时了,我北京网上打印
  12. 邮箱大师手机版服务器异常,网易邮箱大师-高效强大的全平台邮箱客户端
  13. linux KVM的网络设置方法(bridge和nat)
  14. excel三种查重方法
  15. 微信小程序懒加载测试
  16. linux下chmod命令
  17. MVC 音乐商店 第 2 部分: 控制器
  18. 模拟登陆西电研究生教务处(爬虫1)
  19. 转:分布式视频编码关键技术及其发展趋势
  20. ubuntu 更换国内源各大站点速度排名(江苏地区)

热门文章

  1. CS_Node_Tutorials
  2. 树莓派搭建属于自己的论坛---`flarum`搭建日记
  3. @RequestBody接收Json参数 | 用自定义注解对Vo对象中Date类型日期格式校验
  4. 快递鸟代收货款接口API使用技术文档
  5. 九种解决乱码方法总结
  6. 英文小语种网站采集翻译发布工具
  7. C++沉思录上提到的一道练习题及其源码实现
  8. Error @vitejsplugin-vue requires vue (>=3.2.13) or @vuecompiler-sfc to be present in the dependen
  9. MapReduce的自定义计数器
  10. 如何保证原有特效不变让EDIUS替换素材