1.生成随机验证码,存入session;
2.生成包含验证码的图片文件,并且响应给客户端;
3.基于原生servlet还是springmvc或者webflux都可以;
4.关键代码
4.1 验证码工具类(网上很多,不是关键)
4.2 session
基于servlet
//存入会话session
HttpSession session = request.getSession(true);
session.setAttribute(''key'', ''verifyCode'');
基于webflux(webSession使用参数注入)
webSession.getAttributes().put('key'', ''verifyCode'');
4.3 响应
基于servlet
response.getOutputStream()
基于webflux(Mono<Void>)
1.通过生成的图片文件读取响应
ZeroCopyHttpOutputMessage zeroCopyResponse = (ZeroCopyHttpOutputMessage) response;
return zeroCopyResponse.writeWith(file,positon,size);//进行文件流响应
这种方式或者说通过文件读取的方式的响应的方式,无法及时删除生成的文件
2.通过生成的图片文件然后获取对应的字节数组进行响应
//响应字节流 同时删除生成的图片文件
return response.writeWith(Flux.create(sink ->{
NettyDataBufferFactory nettyDataBufferFactory =new NettyDataBufferFactory(new UnpooledByteBufAllocator(false));
try {
DataBuffer dataBuffer= nettyDataBufferFactory.wrap(toByteArray(file));
sink.next(dataBuffer);
}catch (Exception e) {
throw new RuntimeException(e);
}
sink.complete();
}));
这种方式的好处是在获取对应的图片文件字节数组后把图片文件删除toByteArray(file)方法里删除文件file