java WEB 表单 验证码问题与解决
来源:互联网 发布:eclipse不编译java 编辑:程序博客网 时间:2024/06/05 18:42
项目背景: springMVC +spring+mybatis ,web.xml中dispacher的映射路径/。
验证码文件 validatecode.jsp 主要是使用jsp完成一个验证码输出图片,jsp的本质是servlet,所以也可以使用servlet写验证码图片。
验证码文件主要做两件事,第一:形成一个随机的验证码图片流
第二:将生成的随机验证码先存入session中一份,为用户提交的验证码作对比。
一般情况下,可以直接使用<img src="validatecode.jsp">直接引用图片流生成图片,具体如下:
全端代码:
<form method="post" action="${pageContext.request.contextPath }/user/login">
帐号:<input id="loginform:idInput" type="text" name="username" class="loginFormTdIpt" maxlength="50" />
密码:<input id="loginform:pwdInput" class="loginFormTdIpt" type="password" name="password" value="" />
验证码:<input id="loginform:codeInput" class="loginFormTdIpt" type="text" name="checkcode" title="请输入验证码" />
<img id="loginform:vCode" src="${pageContext.request.contextPath }/validatecode.jsp"onclick="javascript:document.getElementById('loginform:vCode').src='${pageContext.request.contextPath }/validatecode.jsp?'+Math.random();" />
<input type="submit" value="提交" >
</form>
img的src属性直接验证码地址,可以读取到验证码流生成图片
其中onclick时间主要是单机图片之后会重新发送一次请求生成新的验证码,参数为随机数,保证每次请求不使用缓存。
后台代码:
@RequestMapping("toLogon")
public String toLogon(String checkcode,HttpSession session){
String key = (String) session.getAttribute("key");
//比较
return "null";
}
本次我的项目情况:web.xml已经将DispatcherServlet的映射规定为 / 所有请求,所以无法直接使用src属性获取验证码图片。
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
测试一,使用controller跳转到验证码页面,然后返回个src,失败,访问不到图片流。
后来通过查看css等文件为什么可以直接访问,在spring-mvc.xml的文件里找到了 一个标签 <mvc:resources/>
标签作用:<!-- 配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.0.xsd -->
使用方式:<mvc:resources location="/" mapping="/**/*.html" />
添加一个<mvc:resources>标签即可
添加:<mvc:resources location="/" mapping="/jsp/validatecode.jsp" />
此时可以直接使用img的src访问该jsp,生成验证码图片
完成。
验证码的jsp完成代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Random"%>
<%@ page import="java.io.OutputStream"%>
<%@ page import="java.awt.Color"%>
<%@ page import="java.awt.Font"%>
<%@ page import="java.awt.Graphics"%>
<%@ page import="java.awt.image.BufferedImage"%>
<%@ page import="javax.imageio.ImageIO"%>
<%
int width = 80;
int height = 32;
//create the image
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
// set the background color
g.setColor(new Color(0xDCDCDC));
g.fillRect(0, 0, width, height);
// draw the border
g.setColor(Color.black);
g.drawRect(0, 0, width - 1, height - 1);
// create a random instance to generate the codes
Random rdm = new Random();
String hash1 = Integer.toHexString(rdm.nextInt());
// make some confusion
for (int i = 0; i < 50; i++) {
int x = rdm.nextInt(width);
int y = rdm.nextInt(height);
g.drawOval(x, y, 0, 0);
}
// generate a random code
String capstr = hash1.substring(0, 4);
session.setAttribute("key", capstr);
g.setColor(new Color(0, 100, 0));
g.setFont(new Font("Candara", Font.BOLD, 24));
g.drawString(capstr, 8, 24);
g.dispose();
response.setContentType("image/jpeg");
out.clear();
out = pageContext.pushBody();
OutputStream strm = response.getOutputStream();
ImageIO.write(image, "jpeg", strm);
strm.close();
%>
- java WEB 表单 验证码问题与解决
- java web解决表单重复提交问题
- web表单登录图形验证码验证
- 如何解决WEB性能测试中的验证码问题
- web创建form表单验证码
- Web 表单验证 javascript
- WEB表单安全验证
- Web开发-表单验证
- web-表单验证
- 解决表单重复提交和分布式服务器验证码存放问题
- Java Web中常见乱码问题的分析与解决
- 解决sui的Form表单验证回调问题
- Java Web验证码
- 【Java Web】验证码
- Java web 验证码
- vs.net2003打开Web项目提示物理路径与url路径无法验证问题的解决
- Java Web笔记:Servlet与表单
- 解决java web 乱码问题
- 三层学习偶得之修改自己电脑的名称
- Eclipse 中 CVS show histoy 显示空白
- 【Android】Android自定义带board的圆角控件
- python2.x和python3.x中raw_input( )和input( )区别
- php实现文件上传
- java WEB 表单 验证码问题与解决
- new和malloc的区别&delete和free的区别
- iOS开发 -关于使用iOS沙盒路径遇到的问题
- Unix环境高级编程(阅读笔记)----中断的系统调用,自动重启动的函数
- mysql插入数据乱码
- iOS 获取手机的型号,系统版本,软件名称,软件版本
- 第五届山东省ACM Hearthstone II(Dp)
- Java之------单机版书店管理系统(设计思想和设计模式系列八)登录模块
- hdu——1061Rightmost Digit(快速幂)