struts验证码

  1. public class ValidateCodeAction {  
  2.     private ByteArrayInputStream byteArrayInputStream;  
  3.   
  4.     public ByteArrayInputStream getByteArrayInputStream() {  
  5.         return byteArrayInputStream;  
  6.     }  
  7.   
  8.     public void setByteArrayInputStream(  
  9.             ByteArrayInputStream byteArrayInputStream) {  
  10.         this.byteArrayInputStream = byteArrayInputStream;  
  11.     }  
  12.   
  13.     public String execute() {  
  14.         try {  
  15.             setByteArrayInputStream(createValidateCodeImage());  
  16.         } catch (Exception e) {  
  17.             e.printStackTrace();  
  18.         }  
  19.         return "success";  
  20.     }  
  21.   
  22.     /** 
  23.      * 产生一个验证码图片 
  24.      *  
  25.      * @return ByteArrayInputStream 
  26.      */  
  27.     private ByteArrayInputStream createValidateCodeImage() {  
  28.         BufferedImage bufferedImage = new BufferedImage(10030,  
  29.                 BufferedImage.TYPE_INT_RGB);  
  30.         Graphics g = bufferedImage.getGraphics();  
  31.         g.setColor(Color.white);  
  32.         g.fillRect(0010030);  
  33.         drawBackground(g);// 绘制图片背景   
  34.         drawValidateCode(g);// 绘制生成的验证码到图片上   
  35.         ByteArrayInputStream byteArrayInputStream = null;  
  36.         ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();  
  37.         try {  
  38.             ImageIO.write(bufferedImage, "JPEG", byteArrayOutputStream);  
  39.         } catch (IOException e) {  
  40.             e.printStackTrace();  
  41.             System.out.println("产生一个验证码图片");  
  42.         }  
  43.         byte[] buf = byteArrayOutputStream.toByteArray();  
  44.         byteArrayInputStream = new ByteArrayInputStream(buf);  
  45.         try {  
  46.             byteArrayOutputStream.close();  
  47.         } catch (IOException e) {  
  48.             // TODO Auto-generated catch block   
  49.             e.printStackTrace();  
  50.         }  
  51.         return byteArrayInputStream;  
  52.     }  
  53.   
  54.     /** 
  55.      * 绘制图片背景 
  56.      *  
  57.      * @param g 
  58.      * */  
  59.     private void drawBackground(Graphics g) {  
  60.         Random random = new Random();  
  61.         int randomX, randomY;  
  62.         for (int i = 0; i < random.nextInt(50)+500; ++i) {  
  63.             g.setColor(new Color(random.nextInt(255), random.nextInt(255),  
  64.                     random.nextInt(255)));  
  65.             randomX = random.nextInt(100);  
  66.             randomY = random.nextInt(30);  
  67.             g.drawLine(randomX, randomY, randomX, randomY);  
  68.         }  
  69.     }  
  70.   
  71.     /** 
  72.      * 产生随机验证码,并存入Session发送至服务器端 
  73.      *  
  74.      * @return String 
  75.      * */  
  76.     private String createCode() {  
  77.         Random random = new Random();  
  78.         StringBuffer sb = new StringBuffer(  
  79.                 "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");// 验证码范围   
  80.         StringBuffer code = new StringBuffer();  
  81.         int codeLength = 4;// 验证码长度   
  82.         for (int i = 0; i < codeLength; ++i) {  
  83.             code.append(sb.charAt(random.nextInt(sb.length())));  
  84.         }  
  85.         // 将验证码存入Session   
  86.         ServletActionContext.getRequest().getSession().setAttribute(  
  87.                 Constant.VALIDATE_CODE, code.toString());  
  88.         return code.toString();  
  89.     }  
  90.   
  91.     /** 
  92.      * 将验证码绘制到图片上 
  93.      *  
  94.      * @param g 
  95.      * */  
  96.     private void drawValidateCode(Graphics g) {  
  97.         String code = createCode();  
  98.         Random random = new Random();  
  99.         int x = 10, y = 0;  
  100.         g.setFont(new Font("Times New Roman", Font.PLAIN, 30));  
  101.         for (int i = 0; i < code.length(); ++i) {  
  102.             y =30-random.nextInt(10);  
  103.             g.setColor(new Color(random.nextInt(150), random.nextInt(150),  
  104.                     random.nextInt(150)));  
  105.             g.drawString(code.substring(i, i + 1), x, y);  
  106.             x += 20;  
  107.         }  
  108.     }  
  109. }  


注意在配置文件中这样配置:

  1. <!-- 验证码解析XML -->  
  2.         <action name="validateCodeAction" class="com.weiyi.exam.web.action.ValidateCodeAction">  
  3.             <result name="success" type="stream">  
  4.                 <param name="contentType">image/jpeg</param>  
  5.                 <param name="inputName">byteArrayInputStream</param>  
  6.             </result>  
  7.         </action>  


每次需要验证码的时候,只要请求此Action

Java企业场景下的实战入门课(Spring Boot+Redis)

04-20
<p> 企业场景下的Java实战课程!  </p> <p> 【超实用课程内容】 本课程主要是从最基础的技术要点一步一个脚印的介绍Spring Boot2.0相关的核心技术栈和缓存中间件Redis常见且典型的数据结构、相关的核心技术栈及典型的应用场景的实战。并附带业务场景实战用户注册和点赞系统中点赞功能模块的设计与实现为各位小伙伴提供企业级项目开发中常见且典型的Java核心技术,可以说是拒绝纸上谈兵、注重实战并学以致用!  </p> <p> <br> </p> <p> 套餐中一共包含2门实战入门课程(共82讲)  </p> <p> 课程1:《Java实战之Spring Boot入门到精通》  </p> <p> 课程2:《Java实战之Redis入门到精通》  </p> <p> <br> </p> <p> 【基础要求】  </p> <p> 1、基本要求:具备一定的JavaSE以及Java Web项目的开发基础、了解spring boot更佳  </p> <p> 2、工具要求:会使用Intellij IDEA、Navicat以及Postman  </p> <p> <br> </p> <p> 【你能收获到什么?】  </p> <p> 1、帮助学员了解并掌握springboot和缓存中间件Redis的方方面面、包括其典型及常用的数据结构及其在实际项目开发中典型的应用场景!  </p> <p> 2、掌握如何基于Spring Boot搭建企业级项目,整合加入中间件Redis相关的依赖配置,并以此为扩展,为后续学习其他中间件做铺垫;可以提升学员Java中间件的实战能力。  </p> <p> 3、帮助学员了解并掌握缓存中间件Redis在实际应用中有哪些常见、典型的应用场景,如对象信息存储、列表存储、队列特性分发消息、试题库随机获取、排行榜等等,这对于学员在平时项目开发、跳槽面试等情况下将有很大的帮助  </p> <p> 4、本课程介绍的基于Redis相关数据结构的特性独立设计并实战项目中典型功能模块,如会员到期自动提醒、点赞功能模块等内容,将有助于学员将所学的技术栈真正应用到实际中、提升自身的数据库设计能力、业务理解能力、代码实战能力以及性能优化方面的能力  </p> <p> <br> </p> <p> 【课程如何观看?】  </p> <p> 1、登录CSDN学院 APP 在我的课程中进行学习;  </p> <p> 2、移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程2年有效观看时长 【资料开放】 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 下载方式:电脑登录课程观看页面,点击右下方课程资料、代码、课件等打包下载 </p> <p> <img src="https://img-bss.csdn.net/202004200821078434.png" alt=""> </p>
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值