Blame view

src/com/fh/controller/system/secCode/SecCodeController.java 2.46 KB
ad5081d3   孙向锦   初始化项目
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
  package com.fh.controller.system.secCode;
  
  import java.awt.Color;
  import java.awt.Font;
  import java.awt.Graphics2D;
  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;
  
  import javax.imageio.ImageIO;
  import javax.servlet.ServletOutputStream;
  import javax.servlet.http.HttpServletResponse;
  
  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 com.fh.util.Const;
  
  /** 
   * 类名称:登录验证码
   * 类描述: 
   * 作者单位: FHqq313596790
   * 联系方式:
   * @version
   */
  @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();
92455d76   孙向锦   添加更新到服务器
87
88
  //		String s = "ABCDEFGHJKLMNPRSTUVWXYZ0123456789";
  		String s = "0123456789";
ad5081d3   孙向锦   初始化项目
89
90
91
  		return s.charAt(r.nextInt(s.length()));
  	}
  }