首页 > 其他分享 >Pig4Cloud之验证码

Pig4Cloud之验证码

时间:2022-11-22 17:59:17浏览次数:53  
标签:Pig4Cloud code false DEFAULT 验证码 captcha randomStr

登陆前端代码

<template #append>
          <div class="login-code">
            <span
                class="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

生成验证码

配置

1.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;

	@Bean
	public 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;

	@Override
	public 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())));
	}

}

标签:Pig4Cloud,code,false,DEFAULT,验证码,captcha,randomStr
From: https://www.cnblogs.com/leepandar/p/16915929.html

相关文章

  • java工具类之验证码工具类
    生成验证码之工具类packagecn.edu.dcxy;importjava.util.Random;publicclassItUtil{/***由于工具类无需创建对象,所以把其构造器私有化*/......
  • JSP利用AJAX实现页面即时校验验证码
    在JSP页面实现验证码校验文章中当时是使用的Servlet类来进行的验证码校验,但是这种方式并不能即时校验,在正常情况下都是直接在用户输入之后就进行校验,这样对用户来说很方便......
  • 开启群晖双重验证(密码+动态验证码)
    利用谷歌身份验证器(GoogleAuthenticator)绑定群晖账户实现验证码登录。​两步验证登录是公认的低成本高强度账号保护技术,很多安全等级较高的网站或软件都采用此种方式进行登......
  • Redis——模拟手机验证码校验过程
    importlombok.extern.slf4j.Slf4j;importredis.clients.jedis.Jedis;importredis.clients.jedis.JedisShardInfo;importjava.util.Random;/***@authorhuangd......
  • python ddddocr图片验证码详解
     下载地址:https://pypi.tuna.tsinghua.edu.cn/simple/ddddocr/安装命令:pipinstallD:\ChromeCoreDownloads\ddddocr-1.3.0-py3-none-any.whl-ihttps://pypi.tuna.ts......
  • selenium遇到手机验证码怎么解决
    完整代码在:  selenium使用案例 解决思路,点击发送送验证码,程序用input方法去和人进行交互,手动输入验证码,按回车键,这样程序就接收到手机验证码了,再把验证码赋值给验证码......
  • Node.js通过密钥计算验证码,无需存数据库
    Node.js通过密钥计算验证码,无需存数据库constCRC32=require('crc-32');functionXixiOtp(sKey,iKeeptime=600){constoPri={};oPri.sKey=sKey;......
  • PHP通过加密计算出短信验证码,无需缓存验证码
    通过加密计算出短信验证码,无需缓存验证码classXixiOtp{private$iKeeptime;//验证码有效期private$sKey;//加密的密钥private$p1Len=1;//验......
  • 使用redis实现验证码功能
    redis模拟验证码发送要求:1.输入手机号,点击发送后随即生成6位数字码,2分钟有效​ 2.输入验证码,点击验证,返回成功或者失败​ 3.每个手机号每天只能输入3次分析:​ 验......
  • NET 6 实现滑动验证码(一)、创建工程
    目录实现滑动验证码的目的创建.NET6工程实现滑动验证码的目的传统验证码实现起来比较简单,但在OCR技术越来越成熟的情况下,验证码的破解难度越来越低,但如果将验证码难度加......