• java验证码的实现


    google kaptcha 验证码

    1. 依赖包:
    1. <!-- google kaptcha依赖 -->
    2. <dependency>
    3. <groupId>com.github.axet</groupId>
    4. <artifactId>kaptcha</artifactId>
    5. <version>0.0.9</version>
    6. </dependency>
    1. 配置类:
    1. package com.example.yebsever.config.googleKaptcha;
    2. import com.google.code.kaptcha.impl.DefaultKaptcha;
    3. import com.google.code.kaptcha.util.Config;
    4. import org.springframework.context.annotation.Bean;
    5. import org.springframework.context.annotation.Configuration;
    6. import java.util.Properties;
    7. /**
    8. * Google的验证码配置类
    9. */
    10. @Configuration
    11. public class GoogleKaptcha {
    12. @Bean
    13. public DefaultKaptcha defaultKaptcha(){
    14. //验证码生成器
    15. DefaultKaptcha defaultKaptcha=new DefaultKaptcha();
    16. //配置
    17. Properties properties = new Properties();
    18. //是否有边框
    19. properties.setProperty("kaptcha.border", "yes");
    20. //设置边框颜色
    21. properties.setProperty("kaptcha.border.color", "105,179,90");
    22. //边框粗细度,默认为1
    23. // properties.setProperty("kaptcha.border.thickness","1");
    24. //验证码
    25. properties.setProperty("kaptcha.session.key","code");
    26. //验证码文本字符颜色 默认为黑色
    27. properties.setProperty("kaptcha.textproducer.font.color", "blue");
    28. //设置字体样式
    29. properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
    30. //字体大小,默认40
    31. properties.setProperty("kaptcha.textproducer.font.size", "30");
    32. //验证码文本字符内容范围 默认为abced2345678gfynmnpwx
    33. // properties.setProperty("kaptcha.textproducer.char.string", "");
    34. //字符长度,默认为5
    35. properties.setProperty("kaptcha.textproducer.char.length", "4");
    36. //字符间距 默认为2
    37. properties.setProperty("kaptcha.textproducer.char.space", "4");
    38. //验证码图片宽度 默认为200
    39. properties.setProperty("kaptcha.image.width", "100");
    40. //验证码图片高度 默认为40
    41. properties.setProperty("kaptcha.image.height", "40");
    42. Config config = new Config(properties);
    43. defaultKaptcha.setConfig(config);
    44. return defaultKaptcha;
    45. }
    46. }
    1. 实现类:
    1. package com.example.yebsever.controller;
    2. import com.google.code.kaptcha.impl.DefaultKaptcha;
    3. import io.swagger.annotations.Api;
    4. import io.swagger.annotations.ApiModelProperty;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.web.bind.annotation.GetMapping;
    7. import org.springframework.web.bind.annotation.RestController;
    8. import javax.imageio.ImageIO;
    9. import javax.servlet.ServletOutputStream;
    10. import javax.servlet.http.HttpServletRequest;
    11. import javax.servlet.http.HttpServletResponse;
    12. import java.awt.image.BufferedImage;
    13. import java.io.IOException;
    14. @Api(tags="验证密控制器")
    15. @RestController
    16. public class CaptchaController {
    17. @Autowired
    18. private DefaultKaptcha defaultKaptcha;
    19. @ApiModelProperty(value = "获取验证码")
    20. @GetMapping(value = "/captcha" ,produces = "image/jpeg")
    21. public void captcha(HttpServletRequest request , HttpServletResponse response){
    22. // 定义response输出类型为image/jpeg类型
    23. response.setDateHeader("Expires", 0);
    24. // Set standard HTTP/1.1 no-cache headers.
    25. response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
    26. // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
    27. response.addHeader("Cache-Control", "post-check=0, pre-check=0");
    28. // Set standard HTTP/1.0 no-cache header.
    29. response.setHeader("Pragma", "no-cache");
    30. // return a jpeg
    31. response.setContentType("image/jpeg");
    32. //-------------------生成验证码 begin --------------------------
    33. //获取验证码文本内容
    34. String text = defaultKaptcha.createText();
    35. System.out.println("验证码内容:"+text);
    36. //将验证码文本内容放入session
    37. request.getSession().setAttribute("captcha",text);
    38. //根据文本验证码内容创建图形验证码
    39. BufferedImage image = defaultKaptcha.createImage(text);
    40. ServletOutputStream outputStream = null;
    41. try {
    42. outputStream = response.getOutputStream();
    43. //输出流输出图片,格式为jpg
    44. ImageIO.write(image,"jpg",outputStream);
    45. outputStream.flush();
    46. } catch (IOException e) {
    47. e.printStackTrace();
    48. }finally {
    49. if (null!=outputStream){
    50. try {
    51. outputStream.close();
    52. } catch (IOException e) {
    53. e.printStackTrace();
    54. }
    55. }
    56. }
    57. //-------------------生成验证码 end --------------------------
    58. }
    59. }
    1. //校验验证码
    2. String captchaSession = (String) request.getSession().getAttribute("captcha");
    3. log.warn("captchaSession=="+captchaSession);
    4. if (!Objects.equals(captchaSession, adminLogParam.getCaptcha())){
    5. return RespBean.error("验证码错误!!");
    6. }

    关注,收藏,点赞,有问题可以私信“门主” :v:z13135361785

  • 相关阅读:
    文心大模型4.0正式发布!来看看这届百度世界有啥亮点
    Spring Boot整合Redis实现订单超时处理
    【Vue 组件化开发 三】父组件给子组件传递数据、组件通信(父传子、子传父)、父访问子(children、ref)、动态组件(is、component)
    【计算机网络】传输层协议——TCP(上)
    当了程序员之后?(真心话)
    一次学习引发我对于 synchronized 的再理解
    10、SpringBoot_测试用例
    SpringBoot SpringBoot 开发实用篇 6 监控 6.6 metrics 端点指标控制
    从零开始学数据结构系列之第一章《双链表》
    Microsoft SQL Server中的错误配置
  • 原文地址:https://blog.csdn.net/m0_55699184/article/details/133549359