1. 程式人生 > >基於Java中的簡單驗證碼設計

基於Java中的簡單驗證碼設計

基於servlet環境 如下簡單生成圖形驗證碼

1)新增新類,如下程式碼

@WebServlet("/randomCode")
public class RandomCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    //生成隨機數
    String randomCode = UUID.randomUUID().toString().substring(0, 5);

    //把隨機數放進Session中
    req.getSession().setAttribute("RANDOMCODE_IN_SESSION", randomCode);

    //建立圖片物件
    int width = 80;
    int height = 40;
    int imageType = BufferedImage.TYPE_INT_RGB;
    BufferedImage image = new BufferedImage(width, height, imageType);

    //畫板
    Graphics g = image.getGraphics();
    g.setColor(Color.WHITE);
    //繪製一個實心的矩形
    g.fillRect(1, 1, width - 2, height - 2);

    //把隨機數畫進圖片中
    g.setColor(Color.BLACK);//設定隨機數的顏色
    Font font = new Font("宋體", Font.BOLD + Font.ITALIC, 20);
    g.setFont(font);//設定隨機數的字型和大小
    g.drawString(randomCode, 10, 28);
    //干擾線
    g.setColor(Color.GRAY);
    Random r = new Random();
    for (int i = 0; i < 100; i++) {
        g.fillRect(r.nextInt(width), r.nextInt(height), 2, 2);
    }

    //關閉
    g.dispose();
    //把圖片物件以流的方式儲存出去
    ImageIO.write(image, "jpg", resp.getOutputStream());
}
}

在login.jsp中的img元素如下配置即可看到效果

<img src="/randomCode">

驗證碼登入實現原理:
1)當訪問登入頁面時,當顯示驗證碼圖片之前,先訪問該生成驗證碼的資原始檔
2)該資原始檔生成驗證碼儲存到session中,並將驗證碼圖片響應給客戶端
3)當用戶登入時,先判斷使用者提交上來的驗證碼是否跟session中的驗證碼匹配,否則驗證不通過,跳轉登入頁面