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. 初入职场的建议--摘自GameRes

    又开始一年一度的校招了,最近跑了几个学校演讲,发现很多话用短短的一堂职业规划课讲还远远不够,因为那堂课仅仅可能帮大家多思考怎样找到一份合适的工作,并没有提醒大家怎样在工作中发展自己的职业. 见过这么多 ...

  2. ab压力测试

    原文链接:http://www.orlion.ga/698/ ab是个什么就不说了搞lamp的都会知道.主要看一下结果都是什么意义. ab 的用法是:ab [options] [http://]hos ...

  3. 哈夫曼树(二)之 C++详解

    上一章介绍了哈夫曼树的基本概念,并通过C语言实现了哈夫曼树.本章是哈夫曼树的C++实现. 目录 1. 哈夫曼树的介绍 2. 哈夫曼树的图文解析 3. 哈夫曼树的基本操作 4. 哈夫曼树的完整源码 转载 ...

  4. eclipse使用tomcat进行部署时编译代码不一致的处理

    操作步骤: 1. 先add and remove 去除项目 2. clean 完成清除工程在tomcat的目录 3. project-->clean 4. add adn remove 重新添加 ...

  5. 面向对象编程语言中的接口(Interface)

    在大多面向对象的编程语言中都提供了Interface(接口)的概念.如果你事先学过这个概念,那么在谈到“接口测试”时,会不会想起这个概念来!?本篇文章简单介绍一下面向对象编程语言中的Interface ...

  6. Jeet – 先进,直观,灵活的 CSS 网格系统

    Jeet 是一个先进的,直观的 CSS 网格系统.通过使用预处理器的强大功能,我们现在可以通过实际分数(或者浮点数)来生成一个基于百分比宽度和间隔的网格.让你用更少的代码,更快的速度构建页面布局. 您 ...

  7. 寻找Fragment的替代品的尝试

    自从Android在3.0推出Fragment之后,现在很多应用的设计都是建立在Fragment的基础上,像是多个tab切换这种需求,就可以使用Fragment,并且Fragment提供了一系列生命周 ...

  8. WCF服务创建与使用(双工模式)

    昨天发布了<WCF服务创建与使用(请求应答模式)>,今天继续学习与强化在双工模式下WCF服务创建与使用,步骤与代码如下. 第一步,定义服务契约(Service Contract),注意Se ...

  9. Moon.Orm3.8技术全攻略

    Moon.ORM技术全攻略  一.绪论 本文主要是针对Moon.ORM的技术的讨论及其使用使用指导.如有其它疑问,请留言.本文主要针对Moon.ORM3.9版本,同时将会对4.0做一个技术预览.本文从 ...

  10. Android布局尺寸思考

    一.初步思考 虽然安卓的这个显示适配的方案有点怪,最初也不容易马上理解,不过这个方案确实有其自己的道理,整个思路是清晰的,方案的也是完整的,没有硬伤 安卓采用的[屏幕密度放缩机制].与web前端对应的 ...