博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一套验证码验证系统的练习 (Servlet + Filter + JSP)
阅读量:2342 次
发布时间:2019-05-10

本文共 3658 字,大约阅读时间需要 12 分钟。

首先是用一个servlet :ImageServlet.java产生验证码并将验证字符串存到session里。

package servlet;import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ImageServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		// 设置页面不缓存		response.setHeader("Pragma", "No-cache");		response.setHeader("Cache", "no-cache");		response.setDateHeader("Expires", 0);		// 在内存中创建图像		int width = 60;		int height = 20;		BufferedImage image = new BufferedImage(width, height,				BufferedImage.TYPE_INT_RGB);		Graphics g = image.getGraphics();		Random random = new Random();		g.setColor(new Color(0, 0, 100));		g.fillRect(0, 0, width, height);		String sRand = "";		for (int i = 0; i < 4; i++) {			String rand = String.valueOf(random.nextInt(10));			sRand += rand;			g.setColor(new Color(30 + random.nextInt(160), 40 + random					.nextInt(170), 40 + random.nextInt(180)));			g.drawString(rand, 13 * i + 6, 16); // 绘制		}		request.getSession().setAttribute("yzm", sRand); // 验证码存入session		g.dispose();		// 输出图像		ImageIO.write(image, "JPEG", response.getOutputStream());	}	public void doPost(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		this.doGet(request, response);	}}
然后在web.xml里把这个servlet 的URL设置成getImage
然后是JSP

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%	String path = request.getContextPath();	String basePath = request.getScheme() + "://"			+ request.getServerName() + ":" + request.getServerPort()			+ path + "/";%>					My JSP 'Login.jsp' starting page		
验证码ImageServlet测试
用户名:
密 码:
验证码
acton= main中的main是一个随便写的servlet ,由于要用filter验证验证码,所以如果能访问到这个servlet 则证明验证码正确。

yanzhengmaFilter.java

package Filter;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class yanzhengmaFilter implements Filter {	@Override	public void destroy() {		// TODO Auto-generated method stub	}	@Override	public void doFilter(ServletRequest request, ServletResponse response,			FilterChain chain) throws IOException, ServletException {		// TODO Auto-generated method stub		HttpServletRequest req = (HttpServletRequest) request;// 转换之后才可以获取sesson		HttpServletResponse res = (HttpServletResponse)response;		String useryzm = request.getParameter("yzm");		String sysyzm = null;		try {			sysyzm = req.getSession().getAttribute("yzm").toString();		} catch (Exception e) {			response.setCharacterEncoding("gbk");			PrintWriter out = response.getWriter();			out.println("");			res.sendRedirect("login.jsp");			return;		}		if (sysyzm.equals(useryzm) && sysyzm != null) {			chain.doFilter(request, response);		} else {			response.setCharacterEncoding("gbk");			PrintWriter out = response.getWriter();			out.println("");						res.sendRedirect("login.jsp");			return;		}	}	@Override	public void init(FilterConfig filterConfig) throws ServletException {		// TODO Auto-generated method stub	}}
在web.xml里把这个过滤器加进去 然后设置当访问main这个servlet时进行验证就行了。

转载地址:http://hgyvb.baihongyu.com/

你可能感兴趣的文章
北京羽毛球场地预定电话
查看>>
本周CNBlog例会:Grassland搜索的后台迁移
查看>>
Flickr的网络收藏夹服务
查看>>
用sed批量替换文件中的字符
查看>>
九型性格心理测试 (From Ulla Zang荣格的个人性格测验题目)
查看>>
[MT] 3.32升级备忘
查看>>
MT 3.33发布: 安全漏洞修正
查看>>
给Blog加上雅虎通PingMe服务:和网站用户即时聊天
查看>>
顶级域名注册分布统计:2006年09月 .com .de .net .uk .cn
查看>>
雅虎通可以批量添加MSN用户了
查看>>
应届生如何应聘雅虎中国/阿里巴巴工作职位
查看>>
豆瓣“我上”:一个blog就是一本有趣的书
查看>>
速度比较:GMail/MSN/Yahoo!Mail
查看>>
搜索引擎来路关键词的挖掘:百度统计的高级分析报告导出获取来源关键词
查看>>
C/C++题目--拷贝构造函数概念
查看>>
C/C++题目--深复制与浅复制
查看>>
数据结构教程--李春葆版(总结)之线性表-顺序存储结构练习题
查看>>
数据结构教程--李春葆版(总结)之排序-插入排序
查看>>
centos7单用户模式修改root密码
查看>>
linux文件类型
查看>>