博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(五)SpringMVC之使用Kaptcha实现验证码功能
阅读量:5940 次
发布时间:2019-06-19

本文共 5826 字,大约阅读时间需要 19 分钟。

 

一、什么是Kaptcha

Kaptcha是Google开发的用于自动生成验证码的插件。

 

二、怎么导入Kaptcha

① 如果没有用Maven管理工具的话就直接导入包(可以直接下载:pau8)

https://pan.baidu.com/s/11225kEsyIFPntYQF9lT2-A

② 用Maven的话,有两个地址可以用,一个是Google那边的,一个是把搬到Github上的

com.google.code.kaptcha
kaptcha
2.3
com.github.penggle
kaptcha
2.3.2

 

三、页面的代码

 

四、写在配置数据库的springX.xml文件中的kaptcha的参数信息

138
28
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
4
no
105,179,50
1
black
25
楷体
black
8
com.google.code.kaptcha.impl.Shadow

具体的参数信息(参考其他网站的):

Constant 描述 默认值
kaptcha.border 图片边框,合法值:yes , no yes
kaptcha.border.color 边框颜色,合法值: r,g,b (and optional alpha) 或者 white,black,blue. black
kaptcha.border.thickness 边框厚度,合法值:>0 1
kaptcha.image.width 图片宽 200
kaptcha.image.height 图片高 50
kaptcha.producer.impl 图片实现类 com.google.code.kaptcha.impl.DefaultKaptcha
kaptcha.textproducer.impl 文本实现类 com.google.code.kaptcha.text.impl.DefaultTextCreator
kaptcha.textproducer.char.string 文本集合,验证码值从此集合中获取 abcde2345678gfynmnpwx
kaptcha.textproducer.char.length 验证码长度 5
kaptcha.textproducer.font.names 字体 Arial, Courier
kaptcha.textproducer.font.size 字体大小 40px.
kaptcha.textproducer.font.color 字体颜色,合法值: r,g,b 或者 white,black,blue. black
kaptcha.textproducer.char.space 文字间隔 2
kaptcha.noise.impl 干扰实现类 com.google.code.kaptcha.impl.DefaultNoise
kaptcha.noise.color 干扰颜色,合法值: r,g,b 或者 white,black,blue. black
kaptcha.obscurificator.impl 图片样式: 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy com.google.code.kaptcha.impl.WaterRipple
kaptcha.background.impl 背景实现类 com.google.code.kaptcha.impl.DefaultBackground
kaptcha.background.clear.from 背景颜色渐变,开始颜色 light grey
kaptcha.background.clear.to 背景颜色渐变,结束颜色 white
kaptcha.word.impl 文字渲染器 com.google.code.kaptcha.text.impl.DefaultWordRenderer
kaptcha.session.key session key KAPTCHA_SESSION_KEY
kaptcha.session.date session date KAPTCHA_SESSION_DATE

 

五、在Controller中对kaptcher做出配置

//导入kaptcha实现得到验证码功能    private Producer kaptchaProducer = null;    @Autowired    public void setCaptchaProducer(Producer kaptchaProducer) {        this.kaptchaProducer = kaptchaProducer;    }
@RequestMapping(value="/login",method=RequestMethod.POST)    public String login(UserInfo u,Model model,HttpServletResponse response, HttpServletRequest request) throws UnsupportedEncodingException{        //获取设置好的验证码和待验证的验证码,如果验证成功就进行数据的操作,如果不对就直接刷新页面      String kaptchaCheck = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);        String kaptchaReceive = (String) request.getParameter("user_input_verifyCode");        if(kaptchaCheck!=null&&(kaptchaCheck.toUpperCase()).equals(kaptchaReceive.toUpperCase())) {            List
list = userInfoService.listUser(); for(UserInfo user:list) { if(u.getUserName().equals(user.getUserName())&&u.getPassword().equals(user.getPassword())) { model.addAttribute("user",user); if(request.getParameter("check")!=null) addCookie(u.getUserName(), u.getPassword(), response, request); return "index"; } } } return "login"; }
/**     * 利用Kaptcha插件来生成验证码     * @param request     * @param response     * @return     */    @RequestMapping("/kaptcha")      public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){        //生成验证码的方法        response.setDateHeader("Expires",0);          response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");          response.addHeader("Cache-Control", "post-check=0, pre-check=0");          response.setHeader("Pragma", "no-cache");          response.setContentType("image/jpeg");          String capText = kaptchaProducer.createText();        request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);        BufferedImage bi = kaptchaProducer.createImage(capText);          ServletOutputStream out = null;        try {            out = response.getOutputStream();            ImageIO.write(bi, "jpg", out);        } catch (IOException e) {            e.printStackTrace();        }          try {              out.flush();          } catch (IOException e) {            e.printStackTrace();        } finally {              try {                out.close();            } catch (IOException e) {                e.printStackTrace();            }          }          return null;      }

效果:

 

转载于:https://www.cnblogs.com/NYfor2018/p/9360989.html

你可能感兴趣的文章
Android 开发第四弹:围住神经猫(简单Demo)
查看>>
阿里感悟(十三)降低成本的敏捷设计
查看>>
Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件...
查看>>
【JSP开发】response输出中文和数据的问题
查看>>
正则表达式
查看>>
对于微分的一些理解更新
查看>>
缇 、 像素 、 厘米
查看>>
qmail+spamassassin启用spf过滤
查看>>
Oracle PL/SQL Developer集成TFS进行团队脚本文件版本管理
查看>>
自动调整速率的Actor设计模式
查看>>
clouderamanager-server启动,log日志中说需要mysql驱动的解决办法
查看>>
LINQ技术、EF技术都出来蛮久了,软件开发者、软件公司是否还有必要有自己的代码生成器?...
查看>>
认识redis
查看>>
吞吐量、带宽、bps、pps、转发能力、线速转发、交换带宽
查看>>
华为交换机命令
查看>>
Linux下实现多网卡绑定
查看>>
jQuery特性效果与链式调用
查看>>
Git常用命令和Github协同流程
查看>>
0040-如何重置Cloudera Manager的admin密码
查看>>
在可编辑表格EditorGrid中,我选择一行已输入的数据,点击删除按钮,该行数据将被删除,然后当我点击表单提交按钮时,已经被删除的那一行数据仍然被插入数据库中...
查看>>