struts中验证码的实现
来源:互联网 发布:excel的数据库功能 编辑:程序博客网 时间:2024/05/02 04:23
public class ValidateCodeAction {private ByteArrayInputStream byteArrayInputStream;public ByteArrayInputStream getByteArrayInputStream() {return byteArrayInputStream;}public void setByteArrayInputStream(ByteArrayInputStream byteArrayInputStream) {this.byteArrayInputStream = byteArrayInputStream;}public String execute() {try {setByteArrayInputStream(createValidateCodeImage());} catch (Exception e) {e.printStackTrace();}return "success";}/** * 产生一个验证码图片 * * @return ByteArrayInputStream */private ByteArrayInputStream createValidateCodeImage() {BufferedImage bufferedImage = new BufferedImage(100, 30,BufferedImage.TYPE_INT_RGB);Graphics g = bufferedImage.getGraphics();g.setColor(Color.white);g.fillRect(0, 0, 100, 30);drawBackground(g);// 绘制图片背景drawValidateCode(g);// 绘制生成的验证码到图片上ByteArrayInputStream byteArrayInputStream = null;ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();try {ImageIO.write(bufferedImage, "JPEG", byteArrayOutputStream);} catch (IOException e) {e.printStackTrace();System.out.println("产生一个验证码图片");}byte[] buf = byteArrayOutputStream.toByteArray();byteArrayInputStream = new ByteArrayInputStream(buf);try {byteArrayOutputStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return byteArrayInputStream;}/** * 绘制图片背景 * * @param g * */private void drawBackground(Graphics g) {Random random = new Random();int randomX, randomY;for (int i = 0; i < random.nextInt(50)+500; ++i) {g.setColor(new Color(random.nextInt(255), random.nextInt(255),random.nextInt(255)));randomX = random.nextInt(100);randomY = random.nextInt(30);g.drawLine(randomX, randomY, randomX, randomY);}}/** * 产生随机验证码,并存入Session发送至服务器端 * * @return String * */private String createCode() {Random random = new Random();StringBuffer sb = new StringBuffer("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");// 验证码范围StringBuffer code = new StringBuffer();int codeLength = 4;// 验证码长度for (int i = 0; i < codeLength; ++i) {code.append(sb.charAt(random.nextInt(sb.length())));}// 将验证码存入SessionServletActionContext.getRequest().getSession().setAttribute(Constant.VALIDATE_CODE, code.toString());return code.toString();}/** * 将验证码绘制到图片上 * * @param g * */private void drawValidateCode(Graphics g) {String code = createCode();Random random = new Random();int x = 10, y = 0;g.setFont(new Font("Times New Roman", Font.PLAIN, 30));for (int i = 0; i < code.length(); ++i) {y =30-random.nextInt(10);g.setColor(new Color(random.nextInt(150), random.nextInt(150),random.nextInt(150)));g.drawString(code.substring(i, i + 1), x, y);x += 20;}}}
注意在配置文件中这样配置:
<!-- 验证码解析XML --><action name="validateCodeAction" class="com.weiyi.exam.web.action.ValidateCodeAction"><result name="success" type="stream"><param name="contentType">image/jpeg</param><param name="inputName">byteArrayInputStream</param></result></action>
每次需要验证码的时候,只要请求此Action
- struts中验证码的实现
- 在struts中实现验证码
- Struts中实现验证码生成和验证
- 基于struts的验证码实现
- Struts的表单验证中
- 【Struts实现页面验证码】
- Struts中生成Action产生的图形验证码
- Struts中Action产生的图形验证码
- Struts实现注册(登陆)的验证过程
- 在Struts中验证框架的运行机制
- Struts+Servlet简单实现登录验证码
- struts中验证机制
- django 中验证码登录验证的实现
- asp.net中验证码的实现
- asp.net中验证码的实现
- asp.net中验证码的实现
- asp.net中验证码的实现
- JSP中中文验证码的实现
- 开门
- WinMain 中的 lpCmdLine
- 从单片机初学者迈向单片机工程师
- mysql while循环嵌套
- js验证只能输入汉字 只能输入数字 只能输入英文和数字 控制输入框只能输入
- struts中验证码的实现
- JS轻松实现单击文本框弹出选择日期
- 用Java读取INI文件(带section的)
- POJ-2495(棋盘覆盖问题)
- sql 外键约束
- silverlight 和XNA要死了,Microsoft就是另外一个IBM
- EL表达式函数-获取字符串长度、截取字符串
- Android 获取手机屏幕的宽度和高度
- Get Android source code