验证码
00-1010验证码,可以说是现在互联网上刚需的。只要有登录,就会有验证码。当然还有各种验证码,静态的,动态的。静态的分为图片、汉字、算术等,动态的分为gif、滑块、点击汉字等。下面小编介绍两个验证码,必要的时候可以收集,这样可以节省你的开发时间。
导语
快乐验证码遵循Apache 2.0开源许可协议,可以自由使用软件。它提供了图片和动画两种显示形式,可以根据自己的需要来实现。Maven访问,只是引入maven依赖。属国
groupIdcom.ramostear/groupId
artifactIdHappy-验证码/artifactId
版本1 . 0 . 1/版本
/dependency生成验证码以下是最基本的用法,其中request和response是必需参数,其他参数是可选的。这种情况下,生成的验证码是图片,内容是09-azA-Z字符的随机组合,长度为5,图片宽度为160,高度为50,字体为微软雅赫。
@控制器
公共类HappyCaptchaController {
@GetMapping('/captcha ')
public void happyCaptcha(HttpServletrequest请求,HttpServletResponse响应){ 0
HappyCaptcha.require(请求、响应)。构建()。finish();
}
}验证码的第三个参数表示是否忽略案例,true表示忽略,false表示验证案例。
@控制器
公共类CaptchaController{
@PostMapping('/verify ')
公共字符串验证(字符串代码,HttpServletRequest请求){ 0
//验证码验证
布尔标志=HappyCaptcha.verification(请求,代码,true);
if(标志){ 0
//其他操作.
}
}
}清理验证码。使用验证码后,可以根据需要手动清理。清理也很简单,只需要一行代码。
@控制器
公共类HappyCaptchaController {
@ GetMapping(“/remove/captcha”)
public void removeCaptcha(HttpServletrequest请求){ 0
HappyCaptcha.remove(请求);
}
}高级功能HappyCaptcha有几个高级功能:样式、类型、长度、宽度、高度、字体。
Style:有两个值,CaptchaStyle。ANIM和队长风格。IMG,前者生成动态验证码,后者生成静态图片。只需添加样式(验证码样式。ANIM)到生成验证码的代码。类型有以下可选值,只需添加类型(验证码类型。WORD)
引自ramostear
3.长度、宽度、高度的介绍都差不多,对应的长度(XXX)、宽度(XXXX)、高度(XX)等。被添加到代码中,所以我不会详细介绍它们。
4.字体的引入需要字体(font。getinstance()。zhfont())。有四种类型。
注意:这些功能可以用链式调用。
显示效果
引自ramostear
ps://p6.toutiaoimg.com/origin/pgc-image/d07f15f5c67e46ea90b6987bfdea7b04?from=pc">EasyCaptcha
图形验证码,支持中文,算数,gif等
maven引入 <dependency> <groupId>com.github.whvcse</groupId> <artifactId>easy-captcha</artifactId> <version>1.6.2</version> </dependency>生成验证码@Controller public class CaptchaController { @RequestMapping("/captcha") public void captcha(HttpServletRequest request, HttpServletResponse response) throws Exception { CaptchaUtil.out(request, response); } }校验验证码@Controller public class LoginController { @PostMapping("/login") public JsonResult login(String username,String password,String verCode){ if (!CaptchaUtil.ver(verCode, request)) { //校验 CaptchaUtil.clear(request); // 清除session中的验证码 // other.... } } }自定义验证码样式// 设置位数 CaptchaUtil.out(5, request, response); // 设置宽、高、位数 CaptchaUtil.out(130, 48, 5, request, response); 验证码类型// png类型 SpecCaptcha captcha = new SpecCaptcha(130, 48); // gif类型 GifCaptcha captcha = new GifCaptcha(130, 48); // 中文类型 ChineseCaptcha captcha = new ChineseCaptcha(130, 48); // 中文gif类型 ChineseGifCaptcha captcha = new ChineseGifCaptcha(130, 48); // 算术类型 ArithmeticCaptcha captcha = new ArithmeticCaptcha(130, 48);前后端分离中使用样例@Controller public class CaptchaController { @Autowired private RedisUtil redisUtil; @ResponseBody @RequestMapping("/captcha") public JsonResult captcha(HttpServletRequest request, HttpServletResponse response) throws Exception { SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5); String verCode = specCaptcha.text().toLowerCase(); String key = UUID.randomUUID().toString(); // 存入redis并设置过期时间为30分钟 redisUtil.setEx(key, verCode, 30, TimeUnit.MINUTES); // 将key和base64返回给前端 return JsonResult.ok().put("key", key).put("image", specCaptcha.toBase64()); } @ResponseBody @PostMapping("/login") public JsonResult login(String username,String password,String verCode,String verKey){ // 获取redis中的验证码 String redisCode = redisUtil.get(verKey); // 判断验证码 if (verCode==null || !redisCode.equals(verCode.trim().toLowerCase())) { return JsonResult.error("验证码不正确"); } } }效果展示对比
这两款验证码相比各自有优缺点,第一款验证码比较丰富,但是前后端分离项目中,不好使用,没有类似redis这种存储;第二款验证码适合前后端分离,相对前者丰富性差点。不过一般的基本上能用。
总结
由于篇幅有限,今天就简单的介绍到这里了。喜欢的小伙伴点个关注+评论+赞哦。私信【验证码】 小编,获得源码地址。