Blame view

src/com/fh/controller/system/secCode/SecCodeController.java 2.41 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
  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;
  
  /** 
   * 类名称:登录验证码
   * 类描述: 
ad5081d3   孙向锦   初始化项目
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
   * @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   孙向锦   添加更新到服务器
85
86
  //		String s = "ABCDEFGHJKLMNPRSTUVWXYZ0123456789";
  		String s = "0123456789";
ad5081d3   孙向锦   初始化项目
87
88
89
  		return s.charAt(r.nextInt(s.length()));
  	}
  }