自己封装的验证码工具类以及登录验证

1.验证码CreateYZMCodeUtils工具类

package com.han.util;

import java.awt.Color;  
import java.awt.Font;  
import java.awt.Graphics2D;  
import java.awt.image.BufferedImage;  
import java.util.Random;  
/** 
 * 生成验证码的工具类 
 * 自己封装的 
 * @author issuser 
 * 
 */  
public class CreateYZMCodeUtils {  
    private Integer width;//验证码图片宽度  
    private Integer height;//验证吗图片高度  
    private Integer num;//验证码的个数  
    private String code;//生成验证码一组字符串  

    private static final Random ran=new Random();//随机数  
    private static CreateYZMCodeUtils createYZMCodeUtils;  
    /** 
     * 通过默认构造初始化参数 
     */  
    private CreateYZMCodeUtils(){  
        width=100;  
        height=30;  
        code="123456789adcdefghijklmnopqrstuvwxyz";  
        num=4;  
    }  
    /** 
     * 利用单利模式创建该验证码工具类 
     * @return 
     */  
    public static CreateYZMCodeUtils getInstance(){  
        if(createYZMCodeUtils==null){  
            createYZMCodeUtils=new CreateYZMCodeUtils();  
        }  
        return createYZMCodeUtils;  
    }  
    public Integer getWidth() {  
        return width;  
    }  

    public void setWidth(Integer width) {  
        this.width = width;  
    }  

    public Integer getHeight() {  
        return height;  
    }  

    public void setHeight(Integer height) {  
        this.height = height;  
    }  

    public Integer getNum() {  
        return num;  
    }  

    public void setNum(Integer num) {  
        this.num = num;  
    }  

    public String getCode() {  
        return code;  
    }  

    public void setCode(String code) {  
        this.code = code;  
    }  

    public static Random getRan() {  
        return ran;  
    }  
    public void setCreateYZMCodeUtils(Integer width,Integer height,Integer num,String code){  
        this.width=width;  
        this.height=height;  
        this.num=num;  
        this.code=code;  
    }  
    public void setCreateYZMCodeUtils(Integer width,Integer height,String code){  
        this.width=width;  
        this.height=height;  
        this.code=code;  
    }  
    /** 
     * 随机生成验证码 
     * @param code 生成验证码的一组字符串 
     * @return 
     */  
    public String getCreateYZMCode(){  
        StringBuffer sb = new StringBuffer();  
        for (int i = 0; i < num; i++) {  
            sb.append(code.charAt(ran.nextInt(code.length())));  
        }  
        return sb.toString();  
    }  
    /** 
     * 生成buffere Image图片 
     * @param finshCode 生成好的验证码字符串 
     * @return 
     */  
    public BufferedImage getCreateYZMImg(String finshCode){  
        // 创建BufferedImage对象  
        BufferedImage img = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);  
        Graphics2D graphic = img.createGraphics();// 创建画笔  
        graphic.setColor(Color.WHITE);// 设置颜色  
        graphic.fillRect(0, 0, width, height);//是用预定的颜色填充一个矩形,得到一个着色的矩形块。  
        graphic.setColor(Color.black);  
        graphic.drawRect(0, 0, width - 1, height - 1);// 画正方形  
        // 设置字体 风格 风格 高度  
        Font font = new Font("宋体", Font.BOLD + Font.ITALIC,(int) (height * 0.8));  
        graphic.setFont(font);  
        for (int i = 0; i < num; i++) {  
            // 随机设置字体RGB颜色  
            graphic.setColor(new Color(ran.nextInt(255), ran.nextInt(255),ran.nextInt(255)));  
            // 画出验证码  
            graphic.drawString(String.valueOf(finshCode.charAt(i)), i* (width /

num) + 4, (int) (height * 0.8));
}
for (int i = 0; i < (width + height); i++) {
// 随机设置字体RGB颜色
graphic.setColor(new Color(ran.nextInt(255), ran.nextInt(255),ran.nextInt(255)));
// 生成干扰点
graphic.drawOval(ran.nextInt(width), ran.nextInt(height), 1, 1);
}
for(int i = 0; i <2; i++){
// 随机设置字体RGB颜色
graphic.setColor(new Color(ran.nextInt(255), ran.nextInt(255),ran.nextInt(255)));
// 随机生成干扰线
graphic.drawLine(0, ran.nextInt(height), width,ran.nextInt(height));
}
return img;
}
}

2.Controller控制器的调用

package com.han.controller;  
import java.awt.image.BufferedImage;  
import java.io.IOException;  
import java.io.OutputStream;  

import javax.annotation.Resource;  
import javax.imageio.ImageIO;  
import javax.servlet.http.HttpServletResponse;  
import javax.servlet.http.HttpSession;  

import org.springframework.stereotype.Controller;  
import org.springframework.ui.Model;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RequestMethod;  

import com.han.model.User;  
import com.han.service.UserServ;  
import com.han.util.CreateYZMCodeUtils;  
import com.han.util.Md5Utils;  

@Controller  
public class AdminController {  
    @Resource(name="userServ")  
    private UserServ userServ;  
    @RequestMapping("/admin")  
    public String index() {  
        return "admin/index";  
    }  

    /** 
     * 跳转至登录页面 
     *  
     * @return 
     */  
    @RequestMapping(value = "/login", method = RequestMethod.GET)  
    public String login() {  
        return "admin/login";  
    }  
    /** 
     * 验证登录 
     * @param username 用户名 
     * @param password 登录密码 
     * @param checkCode 验证码 
     * @param session 
     * @return 
     */  
    @RequestMapping(value = "/login", method = RequestMethod.POST)  
    public String login(String username,String password,String checkCode,HttpSession session,Model model) {  
        String code=(String) session.getAttribute("code");  
        User user = this.userServ.loadByUserName(username);  
        if(user==null){  
            model.addAttribute("userError", "用户名或密码不正确!");  
            return "admin/login";  
        }   
        //验证密码  
        String md5 = Md5Utils.Md5(password);  
        if(!user.getPassword().equals(md5)){  
            model.addAttribute("userError", "用户名或密码不正确!");  
            return "admin/login";  
        }  
        if(code!=null && !code.equals(checkCode)){  
            model.addAttribute("codeError", "验证码不正确,请重新输入!");  
            return "admin/login";  
        }  
        session.setAttribute("loginUser", user);  
        return "redirect:/admin";  
    }  

    /** 
     * 生成验证码图片 
     *  
     * @param response 
     * @param session 
     */  
    @RequestMapping("/createYZM")  
    public void createYZM(HttpServletResponse response, HttpSession session) {  
        OutputStream out = null;  
        try {  
            // 设置响应类型  
            response.setContentType("image/jpg");  
            // 获取创建验证码工具类实例  
            CreateYZMCodeUtils yzm = CreateYZMCodeUtils.getInstance();  
            // 获取生成的验证码字符串  
            String code = yzm.getCreateYZMCode();  
            // 将验证码存放在session  
            session.setAttribute("code", code);  
            // 获取验证码图片  
            BufferedImage img = yzm.getCreateYZMImg(code);  
            out = response.getOutputStream();  
            // 通过ImageIO写出图片  
            ImageIO.write(img, "jpg", out);  
            out.flush();  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (out != null) {  
                try {  
                    out.close();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
}  

3.jsp登录页面

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/resources/css/admin/login.css"/>  
<script type="text/javascript" src="<%=request.getContextPath() %>/resources/js/jquery-1.7.2.min.js"></script>  
<script type="text/javascript" src="<%=request.getContextPath() %>/resources/js/jquery.validate.js"></script>  
<script type="text/javascript" src="<%=request.getContextPath() %>/resources/js/core/jquery.cms.validate.js"></script>  
<title>后台管理登录</title>  
<script type="text/javascript">  
$(function(){  
    $("#myForm").cmsvalidate();  
});  
function reCheckcode(img) {  
        //后面跟一个随机数方便每次请求都是一个新的请求,刷新验证码,防止会在缓存中去验证码图片  
    img.src="createYZM?"+Math.random();  
}  
</script>  
</head>  
<body>  
    <div id="container">  
        <div id="top">  

        </div>  
        <div id="content">  
            <div id="loginForm">  
                   <p style="color: red;margin-left: 98px">${userError}</p>  
                   <form action="" id="myForm"  method="post">  
                    <table cellpadding="0" cellspacing="0" width="380px" id="loginTable">  
                        <tr>  
                            <td align="right" width="90">登录用户:</td>  
                            <td align="left"><input type="text" name="username" size="18"/> </td>  
                        </tr>  
                        <tr>  
                            <td align="right">登录密码:</td>  
                            <td align="left"><input type="password"  name="password" size="18"/></td>  
                        </tr>  
                        <tr>  
                            <td align="right">验证码:</td>  
                            <td align="left">  
                            <input type="text" name="checkCode" id="validateCode" size="10"/>  
                            ${codeError}  
                            </td>  
                        </tr>  
                        <tr>  
                            <td align="left" colspan="2">  
                            <span style="margin-left:94px;cursor:pointer">  
                            <img src="createYZM" onclick="reCheckcode(this)"/></span>  
                            </td>  
                        </tr>  
                        <tr>  
                            <td align="center" colspan="2">  
                                <input type="submit" value="登录">   <input type="reset" value="重置"/>  
                            </td>  
                        </tr>  
                    </table>  
                    </form>  
            </div>  
        </div>  
    </div>      
</body>  
</html>  

转载自:这里写链接内容

猜你喜欢

转载自blog.csdn.net/MacWx/article/details/78973036