Session实现一次性验证码(十)
来源:互联网 发布:云计算培训班 编辑:程序博客网 时间:2024/04/30 05:08
(一)创建登录界面
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>验证码演示W</title></head><body><form action="/Project01/LoginServlet" method="post"> 用户名:<input name="username" type="text"><br/> 密 码:<input name="password" type="password"><br/> 验证码 :<input name="check_code" type="text"> <img src="/Project01/CheckServlet"> <input type="submit" value="提交"></form></body></html>
(二)验证提交的表单数据
package com.Test;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//此类处理login.html表单提交public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); String username=request.getParameter("username"); String password=request.getParameter("password"); String checkcode=request.getParameter("check_code"); String saveCode=(String) request.getSession().getAttribute("check_code"); PrintWriter out=response.getWriter(); //1.把账号、密码分别设置为root、123 if(username.equals("root")&&password.equals("123")&&checkcode.equals(saveCode)){ //2.创建User对象保存账号、密码 User user=new User(); user.setUsername(username); user.setPassword(password); //3.创建Session对象保存User对象 request.getSession().setAttribute("user", user); //4.登陆成功跳转指定页面 response.sendRedirect("/Project01/IndexServlet"); } else if(checkcode.equals(saveCode)){ out.println("账号或密码错误,请从新输入...."); }else{ out.println("验证码输入错误,请从新输入...."); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}
(三)跳转页面
package com.Test;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;//1.创建IndexServlet显示网站的首界面 public class IndexServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //2.response解决乱码问题 response.setContentType("text/html;charset=utf-8"); //3.创建Session对象保存用户信息 HttpSession session=request.getSession(); //4.方法体中的参数要与setAttribute()键一致 User user=(User) session.getAttribute("user"); if(user==null){ response.getWriter().print("您还未登陆,请<a href='/Project01/login.html'>登陆</a>"); }else{ response.getWriter().print("您已登陆,欢迎您 "+user.getUsername()); response.getWriter().print("<a href='/Project01/LogoutServlet'>退出</a>"); //5.创建Cookie对象用来保存Session的id Cookie cookie=new Cookie("JSESSIONID",session.getId()); cookie.setMaxAge(30*60); cookie.setPath("/Project01"); response.addCookie(cookie); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}
(四)验证码生成
package com.Test;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.IOException;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class CheckServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static int WIDTH = 60;// 验证码图片的宽度 private static int HEIGHT = 20;// 验证码图片的高度 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); // 1.设置响应消息体的类型 response.setContentType("image/jpeg"); // 2.创建ServletOutputStream打印图片 ServletOutputStream sos = response.getOutputStream(); // 3.告知浏览器不要缓存此图片 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "No-cache"); response.setDateHeader("Expires", 0); // 4.创建内存图片并获得图像上下文 BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); // 5.产生随机验证码 char[] rands = generateCheckCode(); // 6绘制图像 drawBackground(g); drawRands(g, rands); // 7.绘制完毕,完成图像 g.dispose(); // 8.将图片打印到浏览器上 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ImageIO.write(image, "JPEG", bos); byte[] buf = bos.toByteArray(); response.setContentLength(buf.length); sos.write(buf); bos.close(); sos.close(); // 9.将验证码存入到Session中 session.setAttribute("check_code", new String(rands)); } private void drawRands(Graphics g, char[] rands) { g.setColor(Color.BLACK); g.setFont(new Font(null, Font.ITALIC | Font.BOLD, 18)); // 10在不同高度上输入验证码的每一个字符 g.drawString("" + rands[0], 1, 17); g.drawString("" + rands[1], 16, 15); g.drawString("" + rands[2], 31, 18); g.drawString("" + rands[3], 46, 16); } private void drawBackground(Graphics g) { // 11.绘制背景 g.setColor(new Color(0xDCDCDC)); g.fillRect(0, 0, WIDTH, HEIGHT); // 12.产生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 blue = (int) (Math.random() * 255); int green = (int) (Math.random() * 255); g.setColor(new Color(red, green, blue)); g.drawOval(x, y, 1, 0); } } private char[] generateCheckCode() { String chars = "0123456789abcdefghijklmnopqrstuvwxyz"; char[] rands = new char[4]; for (int i = 0; i < 4; i++) { int rand = (int) (Math.random() * 36); rands[i] = chars.charAt(rand); } return rands; } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}
(五)用户实体类
package com.Test;public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
(六)配置Servlet
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>Project01</display-name> <welcome-file-list> <welcome-file>login.html</welcome-file> </welcome-file-list> <servlet> <description></description> <display-name>IndexServlet</display-name> <servlet-name>IndexServlet</servlet-name> <servlet-class>com.Test.IndexServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>IndexServlet</servlet-name> <url-pattern>/IndexServlet</url-pattern> </servlet-mapping> <servlet> <description></description> <display-name>LoginServlet</display-name> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.Test.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern> </servlet-mapping> <servlet> <description></description> <display-name>LogoutServlet</display-name> <servlet-name>LogoutServlet</servlet-name> <servlet-class>com.Test.LogoutServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LogoutServlet</servlet-name> <url-pattern>/LogoutServlet</url-pattern> </servlet-mapping> <servlet> <description></description> <display-name>CheckServlet</display-name> <servlet-name>CheckServlet</servlet-name> <servlet-class>com.Test.CheckServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CheckServlet</servlet-name> <url-pattern>/CheckServlet</url-pattern> </servlet-mapping></web-app>
结果:
阅读全文
0 0
- Session实现一次性验证码(十)
- Session实现一次性验证码
- 一个利用Session实现一次性验证码
- 利用session实现一次性验证码
- 使用session实现一次性验证码
- 使用session实现一次性验证码
- 使用session实现一次性验证码
- 使用session实现一次性验证码
- 利用Session实现一次性验证码
- Session实例:一次性验证码
- 会话中session实现一次性验证码(源码)
- 2011-10-26 利用Session实现一次性验证码
- javaWEB总结(26):利用session实现一次性验证码
- session的典型案例三:实现一次性验证码
- 利用Cookie或URL实现Session跟踪-----利用Session实现一次性验证码
- Session案例一次性验证码登录
- servlet实现一次性验证码
- java验证码生成程序与用session实现一次性验证
- MySQL中char和varchar的区别
- iptables
- 数据库 MySQL
- Mac 技巧之苹果电脑 Mac OS X 系统下一键即密码锁定屏幕,防止别人乱用乱看的方法
- Java格式化输出之printf
- Session实现一次性验证码(十)
- hadoop 源码编译
- android 把bitmap格式转成jpg 或png格式
- 火狐主页被hao123劫持
- 网络安全基础
- tf.equal(x, y, name=None)
- SDK创建一个非模态,无资源窗口
- 1.7 空格分隔输出
- 二分图浅识