首页>代码>spring mvc maven,websocket在线简单聊天室系统,ace master,extjs>/chatwebsocket/src/main/java/com/chatwebsocket/controller/system/seccode/SecCodeController.java
package com.chatwebsocket.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 javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.chatwebsocket.controller.base.BaseController; import com.chatwebsocket.util.Const; /** * 登录验证码 * * @author zhangmingjie * @date 2019年4月1日 下午4:36:45 * @version 1.0 */ @Controller public class SecCodeController extends BaseController { @RequestMapping("/code") public void generate(HttpServletResponse response) { ByteArrayOutputStream output = new ByteArrayOutputStream(); String code = drawImg(output); HttpSession session = getRequest().getSession(); session.setAttribute(Const.SESSION_SECURITY_CODE, code); try { ServletOutputStream out = response.getOutputStream(); output.writeTo(out); out.close(); } catch (IOException e) { } } /** * 绘制图形 * * @author zhangmingjie * @param output * @return * @date 2019年4月1日 下午4:37:43 * @version 1.0 */ private String drawImg(ByteArrayOutputStream output) { String code = ""; StringBuffer sb = new StringBuffer(); for (int i = 0; i < 4; i++) { sb.append(randomChar()); } code = sb.toString(); int width = 75; int height = 25; BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = bi.createGraphics(); Font font = new Font("Times New Roman", Font.PLAIN, 20); g.setFont(font); g.setColor(new Color(66, 2, 82)); 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; } /** * 绘制字符 * * @author zhangmingjie * @return * @date 2019年4月1日 下午4:38:09 * @version 1.0 */ private char randomChar() { Random r = new Random(); String s = "ABCDEFGHJKLMNPRSTUVWXYZ0123456789"; return s.charAt(r.nextInt(s.length())); } }