java 登录验证码实现类

来源:互联网 发布:均值滤波算法 matlab 编辑:程序博客网 时间:2024/05/02 07:22
public class CheckCode extends HttpServlet {public static final int WIDTH=90;public static final int HEIGHT=30;private String checkcode;public static final char[] CHARS={'2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z'};public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {BufferedImage image=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);//获取绘画实例Graphics g=image.getGraphics();//1.设置前景色setBackGround(g);//2.设置边框setBorder(g);//3.画干扰线drawRandomLine(g);//4.写随机数checkcode=drawRandomNum(g);//5、用session将验证码保存起来,如进行验证时,会在spring security自定义的登录验证MyUsernamePasswordAuthenticationFilter类里进行验证if(request.getSession().getAttribute("validateCode")!=""){request.getSession().removeAttribute("validateCode");request.getSession().setAttribute("validateCode", checkcode);}else{request.getSession().setAttribute("validateCode", checkcode);}//5.图形写给浏览器response.setContentType("IMAGE/jpeg");//浏览器不缓存response.setDateHeader("expires", -1);response.setHeader("Cache-Control", "no-cache");response.setHeader("pragma", "no-cache");ImageIO.write(image, "jpg", response.getOutputStream());}private void setBackGround(Graphics g) {g.setColor(Color.WHITE);g.fillRect(0, 0, WIDTH, HEIGHT);}private void setBorder(Graphics g) {g.setColor(Color.BLUE);g.drawRect(1, 1, WIDTH-3,HEIGHT-3);}private void drawRandomLine(Graphics g) {g.setColor(Color.GREEN);for(int i=0;i<5;i++){int x1=new Random().nextInt(WIDTH);int y1=new Random().nextInt(HEIGHT);int x2=new Random().nextInt(WIDTH);int y2=new Random().nextInt(HEIGHT);g.drawLine(x1, y1, x2, y2);}}private String drawRandomNum(Graphics g) {g.setColor(Color.RED);g.setFont(new Font("宋体",Font.BOLD,20));Random random =new Random();StringBuffer buffer=new StringBuffer();  for(int i=0;i<4;i++){ //生成六个字符   buffer.append(CHARS[random.nextInt(CHARS.length)]);  }    System.out.println("checkcode:"+buffer.toString());//测试用  g.drawString(buffer.toString(),22,22);   return buffer.toString();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {}public String getCheckcode() {return checkcode;}public void setCheckcode(String checkcode) {this.checkcode = checkcode;}}
<pre name="code" class="java">web.xml 配置  <!-- 登录验证码的servlet -->  <servlet>    <servlet-name>CheckCode</servlet-name>    <servlet-class>framework.util.CheckCode</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>CheckCode</servlet-name>    <url-pattern>/servlet/CheckCode</url-pattern>  </servlet-mapping>


<pre name="code" class="java">jsp 前端 和js   <script type="text/javascript">       function changeValidateImg() {      document.getElementById('validateImg').src='/项目名/servlet/CheckCode?t='+new Date().getTime();  }     </script>    <input id="validateCode" name="validateCode" type="text" id="vCode" style="width:118px;" tabindex="3" maxlength="4" />          <span style="margin:20px;">     <img id="validateImg" alt="无法显示验证码" src="/项目名称/servlet/CheckCode" onclick="changeValidateImg();return false;"/>                <a href="javascript:void(0);" onclick="changeValidateImg();return false;">换一张</a>   </span>



0 0
原创粉丝点击