图形验证码工具easy-captcha
支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目
导入依赖:
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
或者
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>kaptcha-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
前端:
- ?d='+new Date()*1不影响链接,它唯一的作用是向IE表明: 图片链接发生了变化,图片需要刷新
<img alt="单击图片刷新!" class="pointer" th:src="@{/common/kaptcha}"
onclick="this.src='/common/kaptcha?d='+new Date()*1">
<!--.-->
生成图片的controller:
@GetMapping("/common/kaptcha")
public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
httpServletResponse.setHeader("Cache-Control", "no-store");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setContentType("image/png");
// 三个参数分别为宽、高、位数
SpecCaptcha captcha = new SpecCaptcha(150, 40, 4);
// 设置类型 数字和字母混合
captcha.setCharType(Captcha.TYPE_DEFAULT);
//设置字体
captcha.setCharType(Captcha.FONT_9);
// 验证码存入session
httpServletRequest.getSession().setAttribute("verifyCode", captcha.text().toLowerCase());
// 输出图片流
captcha.out(httpServletResponse.getOutputStream());
}
登录判断的controller:
@PostMapping(value = "/login")
public String login(@RequestParam("userName") String userName,
@RequestParam("password") String password,
@RequestParam("verifyCode") String verifyCode,
HttpSession session,
HttpServletRequest request) {
//获得验证码,注意与上面的verifyCode区分:上面那个是 用户输入的验证码,session中的"verifyCode"的是图片上生成的验证码
String kaptchaCode = session.getAttribute("verifyCode")+"";
//进行判断:保证用户输入的不为空
if(!StringUtils.hasLength(verifyCode)){
session.setAttribute("errorMsg","验证不能为空!");
return "admin/login";
}
//hasLength判断是否为空:为空则false
if (!StringUtils.hasLength(kaptchaCode) || !verifyCode.toLowerCase().equals(kaptchaCode)){
session.setAttribute("errorMsg","验证码错误!");
return "admin/login";
}
String getAdminPsw = MD5Util.MD5Encode(password,"UTF-8");
AdminUser login = adminUserService.login(userName, getAdminPsw);
if (login == null){
session.setAttribute("errorMsg","用户名或者密码错误!");
return "admin/login";
}
session.setAttribute("admin",login);
session.setAttribute("loginUser", login.getNickName());
session.setAttribute("loginUserId", login.getAdminUserId());
return "admin/index";
}
参考链接:
https://www.jianshu.com/p/8a853a13159b
https://blog.csdn.net/qq_43619628/article/details/112383930
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库