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. iOS----关于第三方的运用(有待补充)

    第三方东西涵盖哪些内容? 1)第三方SDK 2)第三方框架 3)第三方功能代码的封装开源分享 4)第三方工具类等等 PS:1. 对于一个在正在深入学习的程序员而言,有时候参考学习或者使用一下第三方的东 ...

  2. Java并发包中CountDownLatch的工作原理、使用示例

    1. CountDownLatch的介绍 CountDownLatch是一个同步工具,它主要用线程执行之间的协作.CountDownLatch 的作用和 Thread.join() 方法类似,让一些线 ...

  3. 移动端BUG汇总

    position:fixed问题 固定定位到底部会把最后一个元素盖住 你会发现最后一个字被盖住了,并且还滚动不下去. 解决方法: 给后一个元素添加一个高度,或者给body加margin-bottom ...

  4. SQL Server中一个隐性的IO性能杀手-Forwarded record

    简介     最近在一个客户那里注意到一个计数器很高(Forwarded Records/Sec),伴随着间歇性的磁盘等待队列的波动.本篇文章分享什么是forwarded record,并从原理上谈一 ...

  5. Github快速入门手册

    最近在试用Github,开源的思想也让人觉得把一些经验分享出来是非常好的事情.附件是doc文件,如有需要请注意查收.希望能对你有帮助. GITHUB基于互联网的版本控制快速入门手册 如有不妥,欢迎指正 ...

  6. HTML5之废弃和更新的元素与属性

    废弃的元素和属性 [1]标签替换 <acronym> 替代:<abbr> <applet> 替代:<embed> 或 <object> &l ...

  7. HDU 1024Max Sum Plus Plus(最大m字段和)

    /* 动态转移方程:dp[i][j]=max(dp[i-1]+a[i], max(dp[t][j-1])+a[i]) (j-1<=t<i) 表示的是前i个数j个字段和的最大值是多少! */ ...

  8. c#socket同步通信

    再次特别感谢张子阳老师的文章,读后深感益处. 废话不多说,先贴代码 这是服务器端代码 using System; using System.Collections.Generic; using Sys ...

  9. 微软Team Foundation Service 的Scrum模板中的Feature和Backlog Items 的区别【转载】

    Features help us plan work better in Team Foundation Service Scrum process [原文:http://www.nsilverbul ...

  10. Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】

    <Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...