登录验证码的实现

jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="org.apache.commons.lang.StringUtils"%>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="description" content="">
	<meta name="author" content="">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title></title>
	<link rel="stylesheet" href="scripts/login/css/supersized.css">
	<link rel="stylesheet" href="scripts/login/css/bootstrap.min.css" >
	<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
	<!--[if lt IE 9]>
	<script src="js/html5.js"></script>
<![endif]-->
<script src="scripts/login/js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="scripts/login/js/jquery.form.js"></script>
<script type="text/javascript" src="scripts/login/js/supersized.3.2.7.min.js"></script>
<script type="text/javascript" src="scripts/login/js/supersized-init.js"></script>
<script type="text/javascript" src="scripts/login/js/tooltips.js"></script>
<script type="text/javascript" src="scripts/login/js/login.js"></script>
<!--<script type="text/javascript" src="scripts/login/js/scripts.js"></script>-->
	<script type="text/javascript">
		if(self!=top){top.location=self.location;}
		// 重载验证码
		function reloadVerifyCode(){
			var timenow = new Date().getTime();                        
			document.getElementById("captcha_img").src="<%=request.getContextPath()%>/servlet/validateCode?d="+timenow;
		}
			
	</script>
<style type="text/css">

.main_box {
    position: absolute; top:50%; left:50%; margin-top:-260px; margin-left: -300px; padding: 30px; width:600px; height:460px;
	background:url(scripts/login/images/1.png);
    border-radius: 10px;
}
.main_box .setting {position: absolute; top: 5px; right: 10px; width: 10px; height: 10px;}
.main_box .setting a {color: #FF6600;}
.main_box .setting a:hover {color: #555;}
.login_logo {margin-bottom: 20px; height: 45px; text-align: center;}
.login_logo img {height: 45px;}
.login_msg {text-align: center; font-size: 16px;}
.login_form {padding-top: 20px; font-size: 16px;}
.login_box .form-control {display: inline-block; *display: inline; zoom: 1; width: auto; font-size: 18px;}
.login_box .form-control.x319 {width: 319px;}
.login_box .form-control.x164 {width: 164px;}
.login_box .form-group {margin-bottom: 20px;}
.login_box .form-group label.t {width: 120px; text-align: right; cursor: pointer;}
.login_box .form-group.space {padding-top: 15px; border-top: 1px #FFF dotted;}
.login_box .form-group img {margin-top: 1px; height: 32px; vertical-align: top;}
.login_box .m {cursor: pointer;}
.bottom {text-align: center; font-size: 12px;}
</style>
</head>
<body>
	<div class="page-container">
		<div class="main_box">
			<div class="login_box">
				<div class="login_logo">
					<img src="scripts/login/images/logo.png" >
				</div>
			
				<div class="login_form">
					<form id="login_form" method="post" action="<%=request.getContextPath() %>/loginpro.action">
						<div class="form-group">
							<label for="j_username" class="t">用 户:</label> 
							<input id="username" value="" name="username" type="text" class="form-control x319 in" autocomplete="off">
						</div>
						<div class="form-group">
							<label for="j_password" class="t">密 码:</label> 
							<input id="password" value="" name="password" type="password" class="password form-control x319 in">
						</div>
						<div class="form-group">
							<label for="j_captcha" class="t">验证码:</label>
							<input id="captcha" name="captcha" type="text" class="form-control x164 in">
							<img name="captcha_img" id="captcha_img" alt="点击更换" title="点击更换" src="<%=request.getContextPath()%>/servlet/validateCode" οnclick="javascript:reloadVerifyCode();" class="m">
						</div>
	
						<div class="form-group space">
							<label class="t"></label> 
							<button type="button"  id="submit_btn" 
							class="btn btn-primary btn-lg"> 登 录  </button>
							<input type="reset" value=" 重 置 " class=" btn-default btn-lg">
						</div>
					</form>
				</div>
			</div>
			
			<div class="bottom">
				<%String msg=(String)request.getAttribute("errormsg")==null?"": (String)request.getAttribute("errormsg");%>
				<font style="color: blue; font-size: 12px;"><%= msg%></font>
				<%
				String msg2=(String)session.getAttribute("timeouterrormsg")==null?"": (String)session.getAttribute("timeouterrormsg");
				if(StringUtils.isEmpty(msg)){
				%>
				<font style="color: blue; font-size: 12px;"><%= msg2%></font>
				<%} %>
			</div>
			
		</div>
	</div>
	
	<div style="text-align:center;">
	<p></p>
	</div>
	</body>
</html>



java action处理登录方法

	/**
	 * 登录
	 * 
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public String login() {
		username = sRequest.getParameter("username");
		password = sRequest.getParameter("password");
		String checkcode = sRequest.getParameter("captcha");
		if (!checkcode.toLowerCase().equals(
				((String) session.get("piccode")).toLowerCase())) {
			request.put("errormsg", "对不起,验证码错误,登录失败!");
			return ERROR;
		}
		User user = null;
		try {
			user = userService.findUserByNamePsd(username, password);
		} catch (Exception e) {
			user = null;
			e.printStackTrace();
		}
		if (user != null) {// login success
			if (user.getEnable().intValue() == 0) {
				request.put("errormsg", "对不起,该用户当前已经被禁用,请联系管理员!");
				return ERROR;
			}
			session.put("user", user);
			List<Module> moduleList = moduleService.getModuleList();
			if (moduleList != null && moduleList.size() > 0) {
				session.put("modules", moduleList);
			}
			// 登陆用户拥有的角色
			List<Role> initRoles = roleService.findRolesByUserId(user.getId());
			if (initRoles == null || initRoles.size() < 1) {
				request.put("errormsg", "对不起,您还没有授权,请联系管理员!");
				return ERROR;
			}
			// 获得可以访问的模块列表
			List<Module> initModulesList = new ArrayList<Module>();
			for (Role role : initRoles) {
				List<Module> temp = moduleService.findModulesByRoleId(role
						.getId());
				if (temp != null && temp.size() > 0) {
					initModulesList.addAll(temp);
				}
			}
			List<Module> result = null;
			if (initModulesList != null && initModulesList.size() > 0) {
				// 补充完整模块对象并放到session中
				result = new ArrayList<Module>();
				for (Module m : initModulesList) {
					for (Module mm : moduleList) {
						if (m.getId().intValue() == mm.getId().intValue()) {
							result.add(mm);
						}
					}
				}
				session.put("result", result);
				Log log = new Log();
				log.setUserId(user.getId());
				log.setOprate("登录系统");
				log.setIp(sRequest.getRemoteAddr());
				logService.addLog(log);
			} else {
				request.put("errormsg", "对不起,您还没有授权,请联系管理员!");
				return ERROR;
			}
			return SUCCESS;
		} else {// login failed
			request.put("errormsg", "对不起,用户名或密码不正确,登录失败!");
			return ERROR;
		}
	}


java 验证码servlet

package com.xxxxx.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ValidateCode extends HttpServlet {
	private static final long serialVersionUID = 3110081721876882107L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	// 生成数字和字母的验证码
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		BufferedImage img = new BufferedImage(68, 22,
				BufferedImage.TYPE_3BYTE_BGR);// TYPE_INT_RGB
		// 得到该图片的绘图对象
		Graphics g = img.getGraphics();
		Random r = new Random();
		Color c = new Color(200, 150, 255);
		g.setColor(c);
		// 填充整个图片的颜色
		g.fillRect(0, 0, 68, 22);
		// 向图片中输出数字和字母
		StringBuffer sb = new StringBuffer();
		char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
		int index, len = ch.length;
		for (int i = 0; i < 4; i++) {
			index = r.nextInt(len);
			g
					.setColor(new Color(r.nextInt(88), r.nextInt(188), r
							.nextInt(255)));
			g.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 22));// 输出的字体和大小
			g.drawString("" + ch[index], (i * 15) + 3, 18);// 写什么数字,在图片的什么位置画
			sb.append(ch[index]);
		}
		request.getSession().setAttribute("piccode", sb.toString());
		ImageIO.write(img, "JPG", response.getOutputStream());
	}
}



web.xml

	<!-- 验证码begin -->
	<servlet>
		<servlet-name>validateCode</servlet-name>
		<servlet-class>com.xxxxx.util.ValidateCode</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>validateCode</servlet-name>
		<url-pattern>/servlet/validateCode</url-pattern>
	</servlet-mapping>
	<!-- 验证码end -->




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值