基於Java中的簡單驗證碼設計
阿新 • • 發佈:2019-02-12
基於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中的驗證碼匹配,否則驗證不通過,跳轉登入頁面