| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package com.zhcs.dt.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.zhcs.dt.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();
- String s = "ABCDEFGHJKLMNPRSTUVWXYZ0123456789";
- return s.charAt(r.nextInt(s.length()));
- }
- }
|