jsp网页登陆验证

jsp登陆验证,网页登陆验证带验证码校验,登录功能之添加验证码

part_1:专门用于生成一个验证码图片的类:VerificationCode.java

package cn.mike.javase.test; 

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random; 

import javax.imageio.ImageIO; 

import org.junit.Test; 

/**
 * @author : Administrator
 * @function : 这是用来测试随机生成验证码图片的类;
 */
public class VerificationCode { 

  /**
   * 单元测试,试一下能不能自动生成验证码图片
   */
  // 这个函数是单元测试时使用的,这里private一下外面就调用不到了;
  /* @Test */
  /* public */private void test_fun() {
    VerificationCode vc = new VerificationCode();
    BufferedImage image = vc.getImage();
    try {
      // 生成验证码图片,并保存到指定的路径
      VerificationCode.output(image, new FileOutputStream(new File(
          ".\\image\\vcode_2.jpg")));
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } 

    // 将随机生成的文本内容输出到控制台,用于校验
    System.out.println(vc.getText());
  } 

  private int w = 70;// 宽
  private int h = 35;// 高
  private String text;// 文本内容(验证码字符串)
  private Random r = new Random();
  private String[] fontNames = { "宋体", "华文楷体", "黑体", "微软雅黑", "楷体_GB2312" };
  // 随机字符集合中不包括0和o,O,1和l,因为这些不易区分
  private String codes = "23456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYXZ";
  // 验证码图片的背景色:白色
  private Color bgColor = new Color(255, 255, 255); 

  /**
   * 返回一个验证码图片buffer对象:BufferedImage
   */
  public BufferedImage getImage() {
    BufferedImage image = createImage();
    // 获取绘图环境(画笔工具)
    Graphics2D g2 = (Graphics2D) image.getGraphics();
    // sb : 用来保存验证码字符串文本内容
    StringBuilder sb = new StringBuilder(); 

    for (int i = 0; i < 4; ++i) {// 随机生成4个字符
      String s = randomChar() + "";
      sb.append(s);
      float x = i * 1.0F * w / 4;
      g2.setFont(randomFont());
      g2.setColor(randomColor());
      g2.drawString(s, x, h - 5);
    } 

    this.text = sb.toString();// 记录验证码文本内容
    drawLine(image);// 画干扰线
    return image; 

  } 

  /**
   * @return 获取验证码文本内容
   */
  public String getText() {
    return text;
  } 

  /**
   * @param image
   * @param out
   *      将文本写到指定的输出流。比如本测试中FileOutputStream指定的保存路径
   */
  public static void output(BufferedImage image, OutputStream out) {
    try {
      ImageIO.write(image, "jpeg", out);
    } catch (IOException e) {
      e.printStackTrace();
    }
  } 

  private void drawLine(BufferedImage image) {
    Graphics2D g2 = (Graphics2D) image.getGraphics();
    for (int i = 0; i < 3; ++i) {// 画3条干扰线
      int x1 = r.nextInt(w);
      int y1 = r.nextInt(h);
      int x2 = r.nextInt(w);
      int y2 = r.nextInt(h);
      g2.setColor(Color.BLUE);
      g2.drawLine(x1, y1, x2, y2);
    }
  } 

  private Color randomColor() {
    int red = r.nextInt(150);
    int green = r.nextInt(150);
    int blue = r.nextInt(150);
    return new Color(red, green, blue);
  } 

  private Font randomFont() {
    int index = r.nextInt(fontNames.length);
    String fontName = fontNames[index];
    int style = r.nextInt(4);
    int size = r.nextInt(5) + 24;
    return new Font(fontName, style, size);
  } 

  private char randomChar() {
    int index = r.nextInt(codes.length());
    return codes.charAt(index);
  } 

  private BufferedImage createImage() {
    BufferedImage image = new BufferedImage(w, h,
        BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = (Graphics2D) image.getGraphics();
    g2.setColor(this.bgColor);
    g2.fillRect(0, 0, w, h); 

    return image;
  } 

}

part_2:登录界面:Login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
  String path = request.getContextPath();
  String basePath = request.getScheme() + "://"
      + request.getServerName() + ":" + request.getServerPort()
      + path + "/";
%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>"> 

    <title>My JSP 'Login.jsp' starting page</title> 

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
  <link rel="stylesheet" type="text/css" href="styles.css">
  --> 

    <script type="text/javascript">
  function _change_verity_code() {
    var imgElem = document.getElementById("img_src"); 

    //添加一个请求参数a是因为,通常浏览器都有缓存,点击换一张的时候没反应,所以加一个请求参数,获取当前请求时间,可以精确到毫秒,所以每次请求的参数都不同,所以浏览器有缓存也不妨碍;
    imgElem.src = "/ServletDemoProject/servlet/GetVerificationCodeServlet?a="
        + new Date().getTime();
  }
</script> 

  </head> 

  <%
    String fdbkMsg = (String) request.getAttribute("fdbkMsg");
    if (null == fdbkMsg) {
      fdbkMsg = "";
    }
  %> 

  <%
    Boolean logedIn = (Boolean) session.getAttribute("logedIn");
    if (null == logedIn) {
      logedIn = false;
    } else if (logedIn) {
      //如果在本次会话已经登陆,直接重定向到success-page-1
      response
          .sendRedirect("/ServletDemoProject/LOGIN-DEMO/success-page-1.jsp");
    }
  %> 

  <%
    String username = "";
    Cookie[] cookies = request.getCookies();
    if ((null != cookies) && (cookies.length > 0)) {
      for (Cookie c : cookies) {
        if ("admin".equals(c.getValue())) {
          username = "admin";
          break;
        }
      }
    }//end if-condition
  %> 

  <body>
    <br>
    <div align="center">
      请登录:
      <br>
      <form action="/ServletDemoProject/servlet/LoginVerificationServlet"
        method="post">
        <div>
          用户名:
          <input type="text" name="username" value="<%=username%>" />
          <br>
        </div> 

        <div>
          密  码:
          <input type="password" name="password" />
          <br>
        </div>
        <div>
          验证码:
          <input type="text" name="code_text" size="3" />
          <img src="/ServletDemoProject/servlet/GetVerificationCodeServlet"
            id="img_src" />
          <a href="javascript:_change_verity_code()">换一张</a>
          <br>
        </div> 

        <div>
          <font color='red'><%=fdbkMsg%></font>
          <br>
        </div> 

        <div>
          <input type="submit" value="提交" />
          <br>
        </div>
      </form>
    </div>
  </body>
</html>

part_3:处理登录校验的servlet :LoginVerificationServlet.java

package cn.mike.servlet.test_1212; 

import java.awt.image.BufferedImage;
import java.io.IOException; 

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

import cn.mike.javase.test.VerificationCode; 

public class GetVerificationCodeServlet extends HttpServlet { 

  private static final long serialVersionUID = -3520994675366100452L; 

  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException { 

    // 1.新建一个VerificationCode类;
    VerificationCode vc = new VerificationCode(); 

    // 2.从VerificationCode类中获取BufferedImage对象;
    BufferedImage bufImage = vc.getImage(); 

    // 3.同时获取验证码中的文本内容,并放到session域中, 用于校验;
    String code_text = vc.getText();
    request.getSession().setAttribute("code_text", code_text); 

    // 4.将生成的图片输出到客户端浏览器
    VerificationCode.output(bufImage, response.getOutputStream()); 

  }// end method-doGet 

  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException { 

    // do same as GET-method :
    doGet(request, response); 

  }// end method-doPost 

}

part_4:成功登陆后的提示界面1:success-page-1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
  String path = request.getContextPath();
  String basePath = request.getScheme() + "://"
      + request.getServerName() + ":" + request.getServerPort()
      + path + "/";
%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>"> 

    <title>My JSP 'success-page-1.jsp' starting page</title> 

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
  <link rel="stylesheet" type="text/css" href="styles.css">
  --> 

  </head> 

  <%
    String username = (String) session.getAttribute("username");
    if (null == username) {
      //如果username为空值,说明不是通过正常渠道来的,转发到Login页面;
      request.setAttribute("fdbkMsg", "别想走后门进来,赶紧登录!");
      request.getRequestDispatcher("/LOGIN-DEMO/Login.jsp").forward(
          request, response);
    }
  %> 

  <body>
    <br>
    <%=username%>已经成功登陆。
    <br>
    <font>您可以选择浏览:</font>
    <br>
    <a href="/ServletDemoProject/LOGIN-DEMO/success-page-2.jsp">点这儿有精彩.</a>
    <br>
    <a href="/ServletDemoProject/LOGIN-DEMO/success-page-2.jsp">点这儿更精彩.</a>
    <br />
    <a href="/ServletDemoProject/LOGIN-DEMO/success-page-2.jsp">你敢点这儿吗.</a>
    <br />
  </body>
</html>

part_5:成功登陆后的提示界面1:success-page-2.jsp

<%@ page language="java" import="java.util.Date" pageEncoding="UTF-8"%>
<%@ page language="java" import="java.text.SimpleDateFormat"%>
<%
  String path = request.getContextPath();
  String basePath = request.getScheme() + "://"
      + request.getServerName() + ":" + request.getServerPort()
      + path + "/";
%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>"> 

    <title>My JSP 'success-page-2.jsp' starting page</title> 

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
  <link rel="stylesheet" type="text/css" href="styles.css">
  --> 

  </head> 

  <%
    String username = (String) session.getAttribute("username");
    if (null == username) {
      request.setAttribute("fdbkMsg", "呵呵嗒,这里是你来的地方吗?快登陆!");
      //转发到登录界面:
      request.getRequestDispatcher("/LOGIN-DEMO/Login.jsp").forward(
          request, response);
    } 

    SimpleDateFormat sDateFormat = new SimpleDateFormat("a");
    Date today = new Date();
    String am_pm_str = sDateFormat.format(today);
    String am_pm_str_in_chinese = "";
    if ("am".equalsIgnoreCase(am_pm_str)) {
      am_pm_str_in_chinese = "上午";
    } else
      am_pm_str_in_chinese = "下午"; 

    // set null;
    sDateFormat = null;
    today = null;
    am_pm_str = null;
  %> 

  <body>
    <br />
    <font><b><%=username%><%=am_pm_str_in_chinese%>好,能来到页面2真不简单.</b>
    </font>
  </body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python实现带验证码网站的自动登陆实现代码

    早听说用python做网络爬虫非常方便,正好这几天单位也有这样的需求,需要登陆XX网站下载部分文档,于是自己亲身试验了一番,效果还不错. 本例所登录的某网站需要提供用户名,密码和验证码,在此使用了python的urllib2直接登录网站并处理网站的Cookie. Cookie的工作原理: Cookie由服务端生成,然后发送给浏览器,浏览器会将Cookie保存在某个目录下的文本文件中.在下次请求同一网站时,会发送该Cookie给服务器,这样服务器就知道该用户是否合法以及是否需要重新登录. Pyth

  • php通过smtp邮件验证登陆的方法

    本文实例讲述了php通过smtp邮件验证登陆的方法.分享给大家供大家参考,具体如下: 内网的系统为了统一账号,都采用用邮件账号登陆的方式,所以有了以下程序 /** * 通过邮件 验证登陆 * 这里要明白的是用户名是 带域名的:aaa@163.com */ function valideEmailLogin($user, $pass, $smtp_server= 'smtp.163.com', $port=25) { $handle = fsockopen($smtp_server, $port)

  • PHP 验证登陆类分享

    简单的登录类,没有把登录和数据库查询分开 复制代码 代码如下: /*  *   例子  *  *  $Auth=new Auth();  *  $Auth->login("123@123.com","123");  *  $Auth->logout();  *  echo $r->init();      * **/ 验证登陆类 复制代码 代码如下: <?php /*  *  * @ID:      验证登陆类  *  * @class:  

  • JS简单实现登陆验证附效果图

    源代码: 复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312

  • java客户端登陆服务器用户名验证

    本文实例为大家分享了java客户端登陆服务器用户名验证的具体实现代码,供大家参考,具体内容如下 客户端通过键盘录入用户名,服务端对用户名进行验证.  如果用户名存在,服务端显示xxx已登录,客户端显示xxx,欢迎登陆. 如果用户名不存在,服务端显示xxx尝试登陆,客户端显示xxx,用户名不存在.  最多登陆三次,防止暴力登陆. import java.io.*; import java.net.*; /* *客户端 */ class client { public static void mai

  • 用PHP实现登陆验证码(类似条行码状)

    <?php function UPCAbarcode($code) {  $lw = 2; $hi = 100;  $Lencode = array('0001101','0011001','0010011','0111101','0100011',                   '0110001','0101111','0111011','0110111','0001011');  $Rencode = array('1110010','1100110','1101100','10000

  • App登陆java后台处理和用户权限验证

    最近做一个app项目,后台我独自一人开发,开发任务顺序安排上没有把登陆,注册和权限验证这些基本功能放在第一阶段开发,现在是部分业务相关功能已经完成,但是用户入口竟然还没有,只能说明当初需求分析的时候还是太过于着急了,把最基本的用户入口给放到后面了. 现在就需要在现有代码的基础上添加用户登录和权限验证功能. 关于登录和权限验证方面,参照以前做iOS的开发经验,App端提供用户名和密码换取token,每次通过换取的token请求需要登陆权限的操作. 现在反过来,我就需要考虑下面几个问题: 1.在现有

  • Java Web开发过程中登陆模块的验证码的实现方式总结

    验证码及它的作用 验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意破解密码.刷票.论坛灌水.有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录. 图文验证码的原理 在servlet中随机生成一个指定位置的验证码,一般为四位,然后把该验证码保存到session中.在通过Java的绘图类以图片的形式输出该验证码.为了增加验证码的安全级别,可以输出图片的同时输出干扰线,最

  • 详解Angular开发中的登陆与身份验证

    前言 由于 Angular 是单页应用,会在一开始,就把大部分的资源加载到浏览器中,所以就更需要注意验证的时机,并保证只有通过了验证的用户才能看到对应的界面. 本篇文章中的身份验证,指的是如何确定用户是否已经登陆,并确保在每次与服务器的通信中,都能够满足服务器的验证需求.注意,并不包括对具体是否具有某一个权限的判断. 对于登陆,主要是接受用户的用户名密码输入,提交到服务器进行验证,处理验证响应,在浏览器端构建身份验证数据. 实现身份验证的两种方式 目前,实现身份验证的方法,主要有两个大类: Co

  • asp+Ajax简单客户登陆验证

    服务器端操作方便之处我就不吹了,地球人都知道,它最烦莫过于页面刷新,头都被刷晕了,而且他在刷新的时候,还触发服务器端的事件(解决方案:http://skylaugh.cnblogs.com/archive/2006/06/05/418010.html),现在Ajax的出现,他们的结合是发展的必然! 一.介绍一下Ajax在Asp.Net中的基本使用     1.在工程中引入Ajax.dll文件. Ajax.dll实现XmlHttpRequest请求服务器的实现细节..net项目中,添加上对其的引用

随机推荐