博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
仿牛客社区项目2.4登录模块——生成验证码
阅读量:2056 次
发布时间:2019-04-28

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

1、导入jar包:kaptcha

2、config包下写配置类KaptchaConfig.class

使用Producer接口,有两个方法:创建验证码createImage、文字创建图片createText,它还有一个默认实现类DefaultKaptcha.class

Producer接口

  • KaptchaConfig配置类
@Configurationpublic class KaptchaConfig {
//核心是Producer接口,有两个方法:创建验证码createImage、文字创建图片createText,有一个默认实现类DefaultKaptcha.class //服务启动时被自动装配到容器中,通过容器可以得到一个Producer实例,可以创建验证码和图片 @Bean public Producer kaptchaProducer() {
//可以从配置文件中读,properties的key很长,就只在这里写了 Properties properties = new Properties(); properties.setProperty("kaptcha.image.width", "100"); properties.setProperty("kaptcha.image.height", "40"); properties.setProperty("kaptcha.textproducer.font.size", "32"); properties.setProperty("kaptcha.textproducer.font.color", "0,0,0"); properties.setProperty("kaptcha.textproducer.char.string", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYAZ"); properties.setProperty("kaptcha.textproducer.char.length", "4"); properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");//采用哪个噪声类? DefaultKaptcha kaptcha = new DefaultKaptcha();//Producer接口的默认实现类,实例化 Config config = new Config(properties);//传入参数properties(相当于一个map),封装到config对象。 kaptcha.setConfig(config); return kaptcha; }}

3、写在LoginController.java

  1. 和前端页面相连,注入kaptchaProducer对象。
  2. 调用两个方法以生成验证码,即产生字符串,然后将字符串转化为图片.
  3. 这里将验证码字符串存入session中 session.setAttribute(“kaptcha”, text);
  4. 把图片输出给浏览器:
    告诉浏览器生成的是什么格式的图片 response.setContentType(“image/png”);
    获取输出流 OutputStream os = response.getOutputStream();
    输出字节流 ImageIO.write(image, “png”, os);
private static final Logger logger = LoggerFactory.getLogger(LoginController.class);        @Autowired    private Producer kaptchaProducer;    @RequestMapping(path = "/kaptcha", method = RequestMethod.GET)    //向浏览器输出的不是字符串也不是网页,是一个图片,需要自己用response手动向浏览器输出    public void getKaptcha(HttpServletResponse response, HttpSession session) {
// 生成验证码 String text = kaptchaProducer.createText(); BufferedImage image = kaptchaProducer.createImage(text); // 将验证码存入session(多个请求要用,这次生成,下次session) session.setAttribute("kaptcha", text); // 将图片输出给浏览器(先告诉浏览器生成的是什么格式的图片,获取输出流,输出字节流(图片)-捕获异常) response.setContentType("image/png"); try {
OutputStream os = response.getOutputStream(); ImageIO.write(image, "png", os); } catch (IOException e) {
logger.error("响应验证码失败:" + e.getMessage()); } }

4、写在login.html

@{/kaptcha}访问/community/kaptcha,连接到Controller层,验证码显示在浏览器上。

想要刷新验证码,写函数refresh_kaptcha()。

刷新验证码函数refresh_kaptcha():在浏览器上改变路径,服务器不变。

前端语法解释:@{}的作用就是补充/community,#选择id

5、global.js中声明CONTEXT_PATH = “/community”

在任何页面都引用global.js,所以都可以引用该变量

var CONTEXT_PATH = "/community";

6、记录问题

  1. 验证码:用session是因为多次请求,服务器要记住客户端状态,不用cookie是因为它存在客户端,session存在服务端,session更安全。
  2. 配置类,不懂是怎么写的。。

转载地址:http://ksnlf.baihongyu.com/

你可能感兴趣的文章
搜索架构师 一面面经2019年6月
查看>>
稻草人手记
查看>>
第一次kaggle比赛 回顾篇
查看>>
leetcode 50. Pow(x, n)
查看>>
leetcode 130. Surrounded Regions
查看>>
【托业】【全真题库】TEST2-语法题
查看>>
博客文格式优化
查看>>
【托业】【新托业全真模拟】疑难语法题知识点总结(01~05)
查看>>
【SQL】group by 和order by 的区别。
查看>>
【F12】谷歌浏览器--前台效果可以在不访问服务器的前提下直接改样式看效果是否是预期值。...
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
查看>>
Loadrunner之https协议录制回放报错如何解决?(九)
查看>>
python中xrange和range的异同
查看>>
列表、元组、集合、字典
查看>>
【Python】easygui小甲鱼
查看>>
【Python】关于Python多线程的一篇文章转载
查看>>
【Pyton】【小甲鱼】文件
查看>>