>  기사  >  Java  >  java를 사용하여 로그인 인증 코드 구현(전체 코드)

java를 사용하여 로그인 인증 코드 구현(전체 코드)

php是最好的语言
php是最好的语言원래의
2018-08-06 11:35:354489검색

1. 먼저 확인 코드 도구 클래스를 작성합니다

package com.yx.cus.util;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.OutputStream;import java.util.Random;import javax.imageio.ImageIO;public class VerifyCode {
    private int w = 70;    private int h = 35;    private Random r = new Random();    // {"宋体", "华文楷体", "黑体", "华文新魏", "华文隶书", "微软雅黑", "楷体_GB2312"}
    private String[] fontNames  = {"宋体", "华文楷体", "黑体", "微软雅黑", "楷体_GB2312"};    private String codes  = "23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ";    private Color bgColor  = new Color(255, 255, 255);    public static String text ;    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);//指定字体名称、样式和点大小,创建一个新 Font。
    }    //画干扰的线条
    private void drawLine (BufferedImage image) {        int num  = 3;//画三条
        Graphics2D g2 = (Graphics2D)image.getGraphics();        for(int i = 0; i < num; i++) {            int x1 = r.nextInt(w);            int y1 = r.nextInt(h);            int x2 = r.nextInt(w);            int y2 = r.nextInt(h); 
            g2.setStroke(new BasicStroke(1.5F)); 
            g2.setColor(Color.BLUE); 
            g2.drawLine(x1, y1, x2, y2);
        }
    }    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;
    }    public BufferedImage getImage () {
        BufferedImage image = createImage(); 
        Graphics2D g2 = (Graphics2D)image.getGraphics();
        StringBuilder sb = new StringBuilder();        // 向图片中画4个字符
        for(int i = 0; i < 4; i++)  {
            String s = randomChar() + ""; 
            sb.append(s); 
            float x = i * 1.0F * w / 4; 
            g2.setFont(randomFont()); 
            g2.setColor(randomColor()); 
            /**
             * 首字符的基线位于用户空间的 (x, h-5) 位置处
             * 原点在左上角,X轴递增的方向是从左向右;Y轴是从上到下
             * 在提供的坐标位于基线上最左边字符的情况下,可以从右到左呈现字形
             * h-5表示y轴方向,向上偏移了5
             */
            g2.drawString(s, x, h-5); 
        }        this.text = sb.toString(); 
        drawLine(image); 
        return image;       
    }    public String getText () {        return text;
    }    public static void output (BufferedImage image, OutputStream out) 
                throws IOException {
        ImageIO.write(image, "JPEG", out);
    }
}

이 도구 클래스에는 주로 두 가지 방법을 사용합니다.
1. getImage() 메서드를 사용하여 확인 코드를 만들고 BufferedImage 유형의 확인 코드를 반환합니다
2. getText() 이 메소드는 인증 코드의 텍스트를 가져오고 문자열 유형
2을 반환합니다. 확인 코드 인터페이스(컨트롤러)

/**
 * 验证码
 * @param request
 * @return
 * @throws Exception 
 */@RequestMapping(value = "/VC", method = RequestMethod.POST)@ResponseBodypublic void  VC(HttpServletRequest request, HttpServletResponse response ) throws Exception{ 
   VerifyCode code=new VerifyCode();
   BufferedImage image = code.getImage();   //将验证码文本存到Redis
   vckey=IDUtil.nextId();
   JedisClient.set(vckey, code.getText(),60);
   ImageIO.write(image,"jpg",response.getOutputStream()); 
}

이 인터페이스는 확인 코드를 스트림 형식으로 프런트 엔드에 반환합니다. 반환하기 전에 고유 식별자가 생성되어 Redis에 코드를 저장하는 전역 변수에 할당됩니다. 인증 코드 텍스트는 나중에 사용하기 위한 것입니다. 저장된 텍스트에는 시간 제한이 있습니다.
3. 인증 코드 텍스트 식별자를 얻기 위한 인터페이스(즉, 인증 코드 텍스트의 값이 저장됨)

/**
 * 验证码文本的标识
 * @param request
 * @return
 * @throws Exception 
 */
   @RequestMapping(value = "/VCkey", method = RequestMethod.POST)@ResponseBodypublic String  VCkey(HttpServletRequest request, HttpServletResponse response ) throws Exception{ 
       System.out.println(vckey);   return vckey;
}

이 인터페이스는 주로 저장됩니다. Redis에서의 검증 코드 텍스트의 키는 프런트 엔드로 반환된 후 로그인 시 로그인 인터페이스로 반환됩니다.
IV. 로그인 인터페이스(예)

String user_phone = reqstr.get("user_phone");//账号String user_pwd   = reqstr.get("user_pwd");//密码String vc   = reqstr.get("vc").toLowerCase();//用户输入的验证码String vckey   = reqstr.get("vckey");//前端获取的验证码文本的键(标识)String vcode= (String)JedisClient.get(vckey);//通过标识从redis里获取验证码文本if(vc.equals(vcode.toLowerCase())) {//用户输入的验证码与redsi存的作比较
   “验证码成功”
}else if(vcode==null){
    “验证码以过期”
}else{
     “验证码错误”
}

보충: 검증 코드의 키(ID)도 가능합니다. 타임포크 생성 등 프론트엔드에서 생성되는 코드를 인증코드 인터페이스 요청 시 매개변수로 전달하여 백엔드에서 인터페이스와 전역변수를 1개 적게 쓸 수 있도록 한다

관련글 :

java 로그인 인증 코드 구현 코드

JavaScript 로그인 인증 코드 구현

위 내용은 java를 사용하여 로그인 인증 코드 구현(전체 코드)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.