博客
关于我
强烈建议你试试无所不能的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/

你可能感兴趣的文章
防火墙相关
查看>>
网络性能测试工具Iperf上手指南
查看>>
opensecuritytraining video
查看>>
collective intelligence framework
查看>>
2015年关注的技术书籍
查看>>
windows 2003 server 记录远程桌面的连接登录日志和修改3389连接端口方法
查看>>
samhain:比较变态的入侵检测系统
查看>>
Linux psacct文档
查看>>
使用setuptools自动安装python模块
查看>>
python IDE环境
查看>>
传说中的windows加固 -.... -
查看>>
windows目录监控软件
查看>>
Virus Bulletin malware分析杂志以及paper
查看>>
Security Considerations for AppLocker
查看>>
Oracle Forensics t00ls
查看>>
JetLeak Vulnerability: Remote Leakage Of Shared Buffers In Jetty Web Server [CVE-2015-2080]
查看>>
aa总发的天下大成网页挂马监控平台(放出注册码,赶紧抢啊)
查看>>
windows event logs分析
查看>>
python网络编程
查看>>
深入分析Oracle数据库日志文件
查看>>