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%">&nbsp;</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%">&nbsp;</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%">&nbsp;</td>
<td nowrap width="18%" align="right" class="loginname">
<div align="left">密&nbsp;&nbsp;码:</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项目 验证码 *** 最爱那水货的更多相关文章

  1. 使用Intellij IDEA搭建Ext JsMVC web项目

    由于自己从android开发转来学习web开发,最近在学习Jsp,之前接触过一点Extjs,所以用jsp来配合ext试试. Ext JS介绍 extjs是一个javascript框架,它的好处就是有它 ...

  2. 使用IntelliJ IDEA和Maven构建Java web项目并打包部署

    爱编程爱分享,原创文章,转载请注明出处,谢谢! http://www.cnblogs.com/fozero/p/6120375.html 一.背景 现在越来越多的人使用IntelliJ IDEA工具进 ...

  3. web项目总结

    web项目 Webroot下面的index.jsp页面的内容: <%@ page language="java" pageEncoding="UTF-8" ...

  4. VS2015 ASP.NET5 Web项目

    VS2015 ASP.NET5 Web项目结构浅析   前言 本文个人同步博客地址http://aehyok.com/Blog/Detail/76.html 在安装好VS2015之后,一直想看看新版本 ...

  5. Java web项目综合练习(Estore)

    Java web项目综合练习(Estore) 复习day18: ajax代码的书写步骤 2)json格式文本,转js对象的方法是那个 项目开发流程介绍 这里学习的JavaWEB项目实战,主要是把前面学 ...

  6. Spring-Boot快速搭建web项目详细总结

    最近在学习Spring Boot 相关的技术,刚接触就有种相见恨晚的感觉,因为用spring boot进行项目的搭建是在太方便了,我们往往只需要很简单的几步,便可完成一个spring MVC项目的搭建 ...

  7. 三、自动化测试平台搭建-django-如何用mysql数据库做web项目

    从这节开始到后面说的大概内容如下: 这里说的是Django做一个web项目的大概框架,从下篇具体说Django中的模型(查询..),视图(请求,响应,cookie,session..),模板(验证码, ...

  8. web项目加载图片资源

    在web项目中,用户会上传图片,这些图片应该存在服务器硬盘上,而不是存在数据库或者应用程序路径下,在数据库存入文件的路径. 这是一个比较重要的问题,也是开发过程中也解决的问题.当然,我可以跳过,但是成 ...

  9. Maven WEB 项目使用ProGuard进行混淆,最佳解决方案

    Maven WEB 项目使用ProGuard进行混淆,最佳解决方案 近期公司的Android项目做了混淆,虽说对于保护代码并不是100%的,但混淆后的代码可以使那些不法份子难以阅读,这样也能对代码的保 ...

随机推荐

  1. paip.mysql 性能跟iops的以及硬盘缓存的关系

    paip.mysql 性能跟iops的以及硬盘缓存的关系 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.c ...

  2. asp.net Web.config 在不同版本的IIS配置的IHttpHandler的访问路径,以及经典模式和集成模式不同的配置

    如果IIS7.0使用.net4.0以上版本的框架,<system.web>中的httpHandlers节点就没有用了,而应该使用微软专为.net4.0以上版本设计的新节点<syste ...

  3. css多行文本省略号问题

    已知,单行文本溢出内容用省略号代替,css代码如下: text-overflow: ellipsis; 溢出部分用...代替 white-space: nowrap; //强制在一行显示 overfl ...

  4. Reporting Service 没有权限登陆

    在配置好Reporting Service之后,登陆Report Mananger( http://localhost/Reports/Pages/Folder.aspx)出现一个异常,本地用户没有权 ...

  5. C#委托(delegate)

    C#中委托(delegate)是一种安全地封装方法的类型,委托是面向对象的.类型安全的. 使用委托的步骤: 1.声明委托 public delegate void DelegateHandler(st ...

  6. 【WP开发】实现“摇一摇”功能

    尽管我的微信是每八个月登录一次,但我相信各位玩得比我多.微信有一个“摇一摇”功能,这个功能其实是利用了加速度传感器来实现的,这个传感器,我估计再低端的手机都会有的,这是严重基本的传感器. 重力加速度既 ...

  7. 【Discuz】云平台服务:出了点小错,由于站点ID/通信KEY等关键信息丢失导致Discuz!云平台服务出现异常

    提示信息 出了点小错,由于站点ID/通信KEY等关键信息丢失导致Discuz!云平台服务出现异常 版本X3.2.20160601 解决方案 Step1.修改云平台开通状态为未开通状态 Step2.访问 ...

  8. 带毫秒的字符转换成时间(DateTime)格式的通用方法

    C#自身有更好的方式,Net任意String格式转换为DateTime类型 ====================================================== 原文 ==== ...

  9. Pillow实现图片对比

    在编写Web自动化测试用例的时候,如何写断言使新手不解,严格意义上来讲,没有断言的自动化脚本不能叫测试用例.就像功能测试一样,当测试人员做了一些操作之后必然会判断实际结果是否等于预期结果,只不过,这个 ...

  10. 【模式匹配】KMP算法的来龙去脉

    1. 引言 字符串匹配是极为常见的一种模式匹配.简单地说,就是判断主串\(T\)中是否出现该模式串\(P\),即\(P\)为\(T\)的子串.特别地,定义主串为\(T[0 \dots n-1]\),模 ...