struts2生成隨機驗證碼圖片
首先是生成隨機驗證碼圖片的action:
CreateImageAction:
public class CreateImageAction extends ActionSupport { private ByteArrayInputStream inputStream; private static int WIDTH = 60; private static int HEIGHT = 20; public ByteArrayInputStream getInputStream() { return inputStream; } public void setInputStream(ByteArrayInputStream inputStream) { this.inputStream = inputStream; }
private static String createRandom() { String str = "0123456789qwertyuiopasdfghjklzxcvbnm"; char[] rands = new char[4]; Random random = new Random(); for (int i = 0; i < 4; i++) { rands[i] = str.charAt(random.nextInt(36)); } return new String(rands); } private void drawBackground(Graphics g) { // 畫背景 g.setColor(new Color(0xDCDCDC)); g.fillRect(0, 0, WIDTH, HEIGHT); // 隨機產生 120 個干擾點 for (int i = 0; i < 120; i++) { int x = (int) (Math.random() * WIDTH); int y = (int) (Math.random() * HEIGHT); int red = (int) (Math.random() * 255); int green = (int) (Math.random() * 255); int blue = (int) (Math.random() * 255); g.setColor(new Color(red, green, blue)); g.drawOval(x, y, 1, 0); } } private void drawRands(Graphics g, String rands) { g.setColor(Color.BLACK); g.setFont(new Font(null, Font.ITALIC | Font.BOLD, 18)); // 在不同的高度上輸出驗證碼的每個字元 g.drawString("" + rands.charAt(0), 1, 17); g.drawString("" + rands.charAt(1), 16, 15); g.drawString("" + rands.charAt(2), 31, 18); g.drawString("" + rands.charAt(3), 46, 16); System.out.println(rands); } @Override public String execute() throws Exception { HttpServletResponse response = ServletActionContext.getResponse(); // 設定瀏覽器不要快取此圖片 response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); String rands = createRandom(); BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); // 產生影象 drawBackground(g); drawRands(g, rands); // 結束影象 的繪製 過程, 完成影象 g.dispose(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ImageIO.write(image, "jpeg", outputStream); ByteArrayInputStream input = new ByteArrayInputStream(outputStream .toByteArray()); this.setInputStream(input); HttpSession session = ServletActionContext.getRequest().getSession(); session.setAttribute("checkCode", rands); input.close(); outputStream.close(); return SUCCESS; } }
以上是生成隨機驗證碼圖片的action,將生成的隨機數放到session裡,然後頁面提交到驗證隨機數的action:
LoginValidateAction:
public class LoginValidateAction extends ActionSupport { private String checkCode; public String getCheckCode() { return checkCode; } public void setCheckCode(String checkCode) { this.checkCode = checkCode; } @Override public String execute() throws Exception { return SUCCESS; } @Override public void validate() { HttpSession session = ServletActionContext.getRequest().getSession(); String checkCode2 = (String)session.getAttribute("checkCode"); if(!checkCode.equals(checkCode2)) { this.addActionError("輸入的驗證碼不正確,請重新輸入!"); } } }
下面是struts.xml配置部分程式碼:
<action name="createImageAction" class="com.xiaoluo.action.CreateImageAction"> <result name="success" type="stream"> <param name="contentType">image/jpeg</param> <param name="inputName">inputStream</param> </result> </action> <action name="loginValidateAction" class="com.xiaoluo.action.LoginValidateAction"> <result name="success">/success.jsp</result> <result name="input">/login.jsp</result> </action>
最後就是jsp部分的程式碼:
login.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'login.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <h3><font color="blue">帶有驗證碼的登陸介面</font></h3> <s:form action="loginValidateAction.action" theme="simple"> 使用者名稱:<s:textfield name="username"></s:textfield><br> 密碼 :<s:password name="password"></s:password><br> 驗證碼:<s:textfield name="checkCode"></s:textfield>
<!--若要點選圖片重新整理,重新得到一個驗證碼,要在後面加上個隨機數,這樣保證每次提交過去的都是不一樣的path,防止因為快取而使圖片不重新整理--> <img src="createImageAction.action" onclick="this.src='createImageAction.action?'+ Math.random()" title="點選圖片重新整理驗證碼"/><br> <s:actionerror cssStyle="color:red"/> <s:submit value="提交"></s:submit> </s:form> </body> </html>
到此,就完成用struts2生成隨機驗證碼圖片以及實現登陸驗證啦!
相關文章
- servlet awt隨機圖片驗證碼Servlet隨機
- python生成隨機圖形驗證碼Python隨機
- 3個隨機圖片驗證程式碼隨機
- Django登入(含隨機生成圖片驗證碼)註冊例項Django隨機
- golang 生成圖片驗證碼Golang
- Java隨機生成圖片與HTML表單中的驗證碼實現Java隨機HTML
- 隨機生成四個驗證碼隨機
- 應用:隨機生成驗證碼隨機
- iOS開發 - 隨機圖片驗證碼封裝iOS隨機封裝
- java隨機動態生成漢字驗證碼圖片的例項程式碼分享Java隨機
- 【日常筆記】生成驗證碼圖片筆記
- 用python生成驗證碼圖片Python
- 隨機生成六位數驗證碼隨機
- 隨機驗證碼隨機
- Python PIL模組隨機生成中文驗證碼Python隨機
- 5種PHP生成圖片驗證碼例項PHP
- 登陸介面模組解析——生成圖片驗證碼
- 【例項】使用GD庫生成圖片驗證碼
- Python隨機生成驗證碼的兩種方法Python隨機
- python生成驗證碼,文字轉換為圖片Python
- 圖片驗證碼 CaptchaAPT
- 圖片驗證碼介面
- javascript實現的生成驗證碼隨機數程式碼例項JavaScript隨機
- Flutter 生成圖形驗證碼Flutter
- C#圖片驗證碼C#
- 短視訊開發,生成隨機的驗證碼數字隨機
- PostgreSQL 生成隨機數字、字串、日期、驗證碼以及 UUIDSQL隨機字串UI
- 短視訊直播系統,接收到產生驗證碼請求時隨機生成驗證碼隨機
- 十位隨機驗證碼隨機
- .Net WebAPI 生成圖形驗證碼WebAPI
- Java之生成一個隨機驗證碼(數字+大小寫字母)Java隨機
- 【Javascript + Vue】實現隨機生成迷宮圖片JavaScriptVue隨機
- 一對一聊天原始碼,驗證碼生成隨機數字排列組合原始碼隨機
- JavaScript隨機五位數驗證碼JavaScript隨機
- 圖形驗證碼圖片樣式設定
- 用C#生成隨機中文漢字驗證碼的基本原理C#隨機
- PostgreSQL生成隨機身份證IDSQL隨機
- 短視訊app搭建,利用javaWeb生成一張簡易驗證碼圖片APPJavaWeb