• java生成随机验证码


    import org.apache.shiro.SecurityUtils;
    import org.apache.shiro.session.Session;
    import org.apache.shiro.subject.Subject;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.imageio.ImageIO;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletResponse;
    import java.awt.*;
    import java.awt.font.FontRenderContext;
    import java.awt.geom.Rectangle2D;
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.util.Random;
    
    /** 
     * 类名称:登录验证码
     */
    @Controller
    @RequestMapping("/code")
    public class SecCodeController {
    
    	@RequestMapping
    	public void generate(HttpServletResponse response){
    		ByteArrayOutputStream output = new ByteArrayOutputStream();
    		String code = drawImg(output);
    		
    		Subject currentUser = SecurityUtils.getSubject();  
    		Session session = currentUser.getSession();
    		session.setAttribute(Const.SESSION_SECURITY_CODE, code);
    		
    		try {
    			ServletOutputStream out = response.getOutputStream();
    			output.writeTo(out);
    			out.close();
    		} catch (IOException e) {
    			//e.printStackTrace();
    		}
    	}
    	
    	private String drawImg(ByteArrayOutputStream output){
    		String code = "";
    		for(int i=0; i<4; i++){
    			code += randomChar();
    		}
    		int width = 70;
    		int height = 25;
    		BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
    		Font font = new Font("Times New Roman",Font.PLAIN,20);
    		Graphics2D g = bi.createGraphics();
    		g.setFont(font);
    		Color color = new Color(66,2,82);
    		g.setColor(color);
    		g.setBackground(new Color(226,226,240));
    		g.clearRect(0, 0, width, height);
    		FontRenderContext context = g.getFontRenderContext();
    		Rectangle2D bounds = font.getStringBounds(code, context);
    		double x = (width - bounds.getWidth()) / 2;
    		double y = (height - bounds.getHeight()) / 2;
    		double ascent = bounds.getY();
    		double baseY = y - ascent;
    		g.drawString(code, (int)x, (int)baseY);
    		g.dispose();
    		try {
    			ImageIO.write(bi, "jpg", output);
    		} catch (IOException e) {
    			//e.printStackTrace();
    		}
    		return code;
    	}
    	
    	private char randomChar(){
    		Random r = new Random();
    		String s = "ABCDEFGHJKLMNPRSTUVWXYZ0123456789";
    		return s.charAt(r.nextInt(s.length()));
    	}
    }
    

      

  • 相关阅读:
    Uploadify & jQuery.imgAreaSelect 插件实现图片上传裁剪
    Web 开发者不可不知的15条编码原则
    ASP.net 判断上传文件类型的三种方法
    《JavaScript 实战》:实现图片幻滑动展示效果
    如何构建一个很棒网站页脚(Website Footer)
    机器为什么可以学习(1)---测试和训练过程
    机器什么时候可以学习(4) --- 学习的可能性(feasibility of learning)
    算法学习--二分查找的学习
    逻辑回归-监督学习
    线性回归—监督学习
  • 原文地址:https://www.cnblogs.com/lansetuerqi/p/9101300.html
Copyright © 2020-2023  润新知