这个验证码方法只要添加一个jar,在到登录方法里插入验证码代码就可以了,方法简单
- 下载jar
百度网盘下载:hutool-all-4.6.1 提取码:0ssc - 创一个 utils包 在创一个类TestHuTool
package com.zx.Exprot_utils;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
/**
* 生存验证码
* @author Administrator
*
*/
public class TestHuTool {
public static void main(String[] args) {
// 定义图形验证码的长和宽
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
// 图形验证码写出,可以写出到文件,也可以写出到流
lineCaptcha.write("C:/line.png");//也可以把在验证码放到一个盘里
System.out.println(lineCaptcha.getCode());//输出
}
}
- 在登录方法里写验证码
先得到验证码:
/**
* 得到登陆验证码
* @param response
* @param session
* @throws IOException
*/
@RequestMapping("getCode")
public void getCode(HttpServletResponse response,HttpSession session) throws IOException {
// 定义图形验证码的长和宽
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(116, 36,4,5);//高宽和清晰度
session.setAttribute("code", lineCaptcha.getCode());
ServletOutputStream outputStream = response.getOutputStream();
ImageIO.write(lineCaptcha.getImage(), "JPEG", outputStream);
}
登录放法里插入验证码 代码
/**
* 登录方法
* @param sysUserVo
* @param model
* @return
*/
@RequestMapping("/loginuser")
public String login(SysUserVo sysUserVo,Model model){
String code=WebUtils.getHttpSession().getAttribute("code").toString();//验证码
if(sysUserVo.getCode().equals(code)) {//判断验证码是否正确
SysUser sysUser=this.sysUserService.login(sysUserVo);
if (sysUser!=null) {
//放到session
WebUtils.getHttpSession().setAttribute("sysuser", sysUser);
//记录登陆日志 向sys_login_log里面插入数据
LoginfoVo logInfoVo=new LoginfoVo();
logInfoVo.setLogintime(new Date());//插入当前时间
logInfoVo.setLoginname(sysUser.getRealname()+"-"+sysUser.getLoginname());//用session插入这两个名称
logInfoVo.setLoginip(WebUtils.getHttpServletRequest().getRemoteAddr());//插入IP地址
sysLoginfoService.addLogInfo(logInfoVo);
return "/carrent/login/index";
} else {
model.addAttribute("error", SysConstast.USER_LOGIN_ERROR_MSG);
return "/carrent/login/login";
}
}else {
model.addAttribute("error", SysConstast.USER_LOGIN_CODE_ERROR_MSG);
return "/carrent/login/login";//判断验证码不正确反回
}
}
图形参考:
- VO里添加 code
package com.zx.vo;
import com.zx.po.SysUser;
public class SysUserVo extends SysUser{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* 分页参数
*/
private Integer page;
private Integer limit;
private String code;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
//接收多个角色id 用于批量删除
private Integer [] ids;
public Integer[] getIds() {
return ids;
}
public void setIds(Integer[] ids) {
this.ids = ids;
}
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
this.page = page;
}
public Integer getLimit() {
return limit;
}
public void setLimit(Integer limit) {
this.limit = limit;
}
}
- Jsp页面
<div class="layui-form-item input-item" id="imgCode">
<label for="code">验证码</label>
<input type="text" placeholder="请输入验证码" autocomplete="off" id="code" name="code" class="layui-input" lay-verify="required">
<img src="${ctx}/login/getCode.do" onclick="this.src=this.src+'?'">
</div>