• 登录验证码的实现


    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" onclick="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 -->
  • 相关阅读:
    100以内整数四则运算
    软件工程基础
    使用python分析微信好友
    数据库实践
    爬虫
    Python编程预测比赛成绩
    自己的第一个网页
    科学计算与可视化
    对小学生四则运算用界面呈现
    在使用memory_profiler检测python代码运行时内存出现解码错误
  • 原文地址:https://www.cnblogs.com/henuyuxiang/p/6813525.html
Copyright © 2020-2023  润新知