web项目 验证码 *** 最爱那水货
1. jsp代码 :
<Script>
function changeImg(){
document.getElementById("certImg").src ="makeCertPic.jsp?it="+Math.random(); /* +Math.random() */
}
</Script> <table width="100%" border="0" cellspacing="1" cellpadding="1">
<tr>
<td width="5%"> </td>
<td nowrap width="11%" align="left" class="loginname">验证码: </td>
<td nowrap width="68%" class="loginname">
<div align="left">
<input type="text" istyle="input01" name="certCode"
class="input01" />
<!-- <iframe width="200" height="60" id="certImg" src="makeCertPic.jsp"></iframe> -->
<img id="certImg" src="makeCertPic.jsp" onclick="changeImg()" alt="看不清换一张">
<!-- onclick="changeImg()" alt="看不清换一张" --> </div> </td> </tr> <tr>
<td width="14%"> </td> <td nowrap width="18%" align="right" class="loginname">
<div align="left">用户名:</div>
</td>
<td nowrap width="68%" class="loginname">
<div align="left">
<html:text styleClass="input01" property="user_code"
onkeypress="return handleEnter(this, event,1)" />
<!-- <a href="#" onclick="changeImg()">看不清换一张 </a> -->
</div>
</td>
</tr>
<tr>
<td width="14%"> </td>
<td nowrap width="18%" align="right" class="loginname">
<div align="left">密 码:</div>
</td>
<td nowrap width="68%" class="loginname">
<div align="left">
<html:password styleClass="input01" property="password"
value="" />
</div>
</td> </tr> <tr> <td align="left">
<td nowrap align="right"><html:submit value='登 录'
styleClass="button" onclick="return ck_login();" /></td>
<td nowrap align="left"><html:reset value='重 写'
styleClass="button" /></td>
</td>
</tr>
</table>
2.链接的加jsp文件,用于加载验证码数据
<%@page import="com.test.makeCertPic"%>
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@page contentType="image/jpeg" %> <%
makeCertPic pic = new makeCertPic();
String str = pic.getCertPic(0, 0, response.getOutputStream());
session.setAttribute("certCode", str);
//关闭response ,不加会运行两次,且会报错
out.clear();
out = pageContext.pushBody();
%>
3.对应的验证码类 java代码
package com.test; import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO; /**
* @author dzy 生成验证码图片
*/
public class makeCertPic {
// 验证码图片中可以出现的字符集,可根据需要修改
private char mapTable[] = { '0','1', '2', '3', '4', '5', '6', '7', '8','9' }; /**
* 功能:生成彩色验证码图片 参数width为生成图片的宽度,参数height为生成图片的高度,参数os为页面的输出流
*/
public String getCertPic(int width, int height, OutputStream os) {
if (width <= 0)
width = 60;
if (height <= 0)
height = 20;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
// 设定背景色
g.setColor(new Color(0xDCDCDC));
g.fillRect(0, 0, width, height);
// 画边框
g.setColor(Color.black);
g.drawRect(0, 0, width - 1, height - 1);
// 取随机产生的认证码
String strEnsure = "";
// 4代表4位验证码,如果要生成更多位的认证码,则加大数值
for (int i = 0; i < 4; ++i) {
strEnsure += mapTable[(int) (mapTable.length * Math.random())];
}
// 将认证码显示到图像中,如果要生成更多位的认证码,增加drawString语句
g.setColor(Color.black);
g.setFont(new Font("Atlantic Inline", Font.PLAIN, 18));
String str = strEnsure.substring(0, 1);
g.drawString(str, 8, 17);
str = strEnsure.substring(1, 2);
g.drawString(str, 20, 15);
str = strEnsure.substring(2, 3);
g.drawString(str, 35, 18);
str = strEnsure.substring(3, 4);
g.drawString(str, 45, 15);
// 随机产生10个干扰点
Random rand = new Random();
for (int i = 0; i < 10; i++) {
int x = rand.nextInt(width);
int y = rand.nextInt(height);
g.drawOval(x, y, 1, 1);
}
// 释放图形上下文
g.dispose();
try {
// 输出图像到页面
ImageIO.write(image, "JPEG", os);
} catch (IOException e) {
return "";
}
return strEnsure;
}
}
项目中的 验证码 尤其注意登陆时会被项目的filter类过滤排除,导致验证码加载不出来 ,需要在web.xml中 进行jsp的自定义过滤
本项目中设置filter的xml文件 和 过滤的java代码如下:
<filter>
<filter-name>BtSystemFilter</filter-name>
<filter-class>com.bettersoft.filters.BtSystemFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>BtSystemFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
HttpSession session = request.getSession();
String uri = request.getRequestURI();
String projectName = request.getContextPath();
String url=uri.substring(projectName.length());
try
{
if( uri.startsWith(projectName + "/services")
|| uri.startsWith(projectName + "/axis2-web")) //webservice
{
chain.doFilter(req, resp);
}
//过滤.jsp和.do
else if (uri.endsWith(".jsp")|| uri.endsWith(".do"))
{
//如果为系统登录类型资源不进行session检查
if((uri.equals(projectName+"/index.jsp"))
||uri.equals(projectName+"/login.jsp")
||uri.equals(projectName+"/main.jsp")
||uri.equals(projectName+"/login.do")
||uri.equals(projectName+"/showTRCA.jsp")//用证书登录时选择证书
||uri.equals(projectName+"/bindCA.jsp")//用证书登录时绑定证书
||uri.equals(projectName+"/error.jsp")
||uri.equals(projectName+"/makeCertPic.jsp")//验证码
)
{
chain.doFilter(req, resp);
}
else
{ //session失效或未登录
if (session.getAttribute("com.bettersoft.admin.userbean") == null)
{ response.sendRedirect(projectName + "/login.jsp?nologin=nologin");
}
else
{ //如果当前资源是系统菜单
if(CheckUserUtil.isSyeRes(url))
{
if(CheckUserUtil.hasPermission(request, url))
{
chain.doFilter(req, resp);
}
else
{
response.sendRedirect(projectName + "/login.jsp?nologin=invalidurl");
}
}
else
{
chain.doFilter(req, resp);
}
}
}
}else
{
chain.doFilter(req, resp);
}
}
catch(Exception e)
{ e.printStackTrace();
String errormsg="未知的系统异常";
if(e.getMessage()!=null)
{
//if(e.getMessage().length()<50)
errormsg=e.getMessage();
}
request.setAttribute("errormsg",errormsg);
request.getRequestDispatcher("/error.jsp").forward(request, response);
}
}
最后的效果图

web项目 验证码 *** 最爱那水货的更多相关文章
- 使用Intellij IDEA搭建Ext JsMVC web项目
由于自己从android开发转来学习web开发,最近在学习Jsp,之前接触过一点Extjs,所以用jsp来配合ext试试. Ext JS介绍 extjs是一个javascript框架,它的好处就是有它 ...
- 使用IntelliJ IDEA和Maven构建Java web项目并打包部署
爱编程爱分享,原创文章,转载请注明出处,谢谢! http://www.cnblogs.com/fozero/p/6120375.html 一.背景 现在越来越多的人使用IntelliJ IDEA工具进 ...
- web项目总结
web项目 Webroot下面的index.jsp页面的内容: <%@ page language="java" pageEncoding="UTF-8" ...
- VS2015 ASP.NET5 Web项目
VS2015 ASP.NET5 Web项目结构浅析 前言 本文个人同步博客地址http://aehyok.com/Blog/Detail/76.html 在安装好VS2015之后,一直想看看新版本 ...
- Java web项目综合练习(Estore)
Java web项目综合练习(Estore) 复习day18: ajax代码的书写步骤 2)json格式文本,转js对象的方法是那个 项目开发流程介绍 这里学习的JavaWEB项目实战,主要是把前面学 ...
- Spring-Boot快速搭建web项目详细总结
最近在学习Spring Boot 相关的技术,刚接触就有种相见恨晚的感觉,因为用spring boot进行项目的搭建是在太方便了,我们往往只需要很简单的几步,便可完成一个spring MVC项目的搭建 ...
- 三、自动化测试平台搭建-django-如何用mysql数据库做web项目
从这节开始到后面说的大概内容如下: 这里说的是Django做一个web项目的大概框架,从下篇具体说Django中的模型(查询..),视图(请求,响应,cookie,session..),模板(验证码, ...
- web项目加载图片资源
在web项目中,用户会上传图片,这些图片应该存在服务器硬盘上,而不是存在数据库或者应用程序路径下,在数据库存入文件的路径. 这是一个比较重要的问题,也是开发过程中也解决的问题.当然,我可以跳过,但是成 ...
- Maven WEB 项目使用ProGuard进行混淆,最佳解决方案
Maven WEB 项目使用ProGuard进行混淆,最佳解决方案 近期公司的Android项目做了混淆,虽说对于保护代码并不是100%的,但混淆后的代码可以使那些不法份子难以阅读,这样也能对代码的保 ...
随机推荐
- Web信息架构——设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!)
Web信息架构——设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!) [美]]Peter Morville(彼得·莫维尔) Louis Rosenfeld(路易斯·罗森菲尔德) ...
- 怎样将多个CSS文件导入一个CSS文件中
问题: 在HTML中引入css的其中的两个方法: 导入式和链接式的目的都是将一个独立的css文件引入一个文件中,二者的区别不大,事实上,二者最大的区别在于链接式使用html的标记引入外部css文 ...
- Locations Section of OpenCascade BRep
Locations Section of OpenCascade BRep eryar@163.com 摘要Abstract:本文结合OpenCascade的BRep格式描述文档和源程序,对BRep格 ...
- 本机搭建zookeeper集群
3个 clientPort分别设置为2181,2182,2083 server.1=127.0.0.1:2888:3888 server.2=127.0.0.2:2889:3889 server.3= ...
- [转载]基于TFS实践敏捷-修复Bug和执行代码评审
本主题阐释了这些功能,以继续这一关注虚拟敏捷团队成员的一天的教程. Peter 忙于编写一些代码以完成积压工作 (backlog) 项任务.但是,他的同事发现了一个阻碍他们工作的 Bug,他想立即修复 ...
- [New Portal]Windows Azure Virtual Machine (11) 在本地使用Hyper-V制作虚拟机模板,并上传至Azure (1)
<Windows Azure Platform 系列文章目录> 本章介绍的内容是将本地Hyper-V的VHD,上传到Azure数据中心,作为自定义的虚拟机模板. 注意:因为在制作VHD的最 ...
- 用SQL语句查找包含有某个关键字的存储过程、触发器、函数等(仅适用MS SQL SERVER)
第一种方法:利用系统表进行查询 --将text替换成你要查找的内容 select name from sysobjects o, syscomments s where o.id = s.i ...
- 浏览器桌面通知Notification探究
首先说明,这篇博文不是科普讲解的,而是立flag研究的,是关于浏览器消息自动推送,就是下面这个玩意: 最近常常在浏览器看到这样的消息推送,还有QQ.com的推送,现在我对这个不了解,不知道叫消息自动推 ...
- SQL 语句的TOP,Distinct语句
--Top获取前几条数据,一般都与Order By连用 SELECT TOP 3 * FROM dbo.MyStudent --查询Student表中前3条所有的数据 SELECT TOP 3 S_N ...
- 兼容各浏览器的iframe - onlaod事件
上次工作中,在使用 Iframe+FormSubmit进行无刷新提交时,如果后台返回的数据有延迟,或者浏览器对Iframe内容的更改过慢的话,会遇到onload响应在Iframe内容改变之前触发,这也 ...