You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
2.8 KiB
Java

package com.nmgs.controller;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.captcha.generator.RandomGenerator;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.imageio.ImageIO;
import java.awt.*;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@RestController
@RequestMapping(value = "login")
@Api(tags = "登录信息")
public class LoginController {
/**
*
*
* @return
*/
@RequestMapping(value = "getCode",
method = {RequestMethod.POST}
)
@ApiOperation(httpMethod = "POST", value = "登录页面获取图片流验证码")
public ResponseEntity<byte[]> getCode() throws IOException {
//配置验证码图片的宽度以及验证码字符的个数还有它的模糊程度也就是干扰线这儿设置4个字符1条干扰线
LineCaptcha captcha = new LineCaptcha(130, 40, 4, 1);
//配置只有纯数字 1到9
captcha.setGenerator(new RandomGenerator("123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", 4));
//配置背景颜色
captcha.setBackground(Color.pink);
//配置字体
captcha.setFont(new Font("微软雅黑", Font.BOLD, 18));
//这儿就是生成验证码了
String captchaCode = captcha.getCode();
//其实,到这儿,验证码已配置完成,大家可以打印下 captchaCode 是可以出来4个字符的字符串的。
System.out.println("验证码==========>" + captchaCode);
//下面两行是生成图片的文件流
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(captcha.getImage(), "png", outputStream);
//在这中间还有一串的代码
//那就是还需要生成唯一的uuid将来需要结合当前生成验证码结合起来
//把它们存到缓存中,这样,前端发送过后就可以拿来做比较
//这儿就是设置返回体以及返回的内容(最后返回的是一个图片的文件流,直接在浏览器访问看到是一个图片)
HttpHeaders headers = new HttpHeaders();
headers.setContentType(org.springframework.http.MediaType.IMAGE_PNG);
headers.set("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
headers.setPragma("no-cache");
headers.setDate("Expires", 0);
byte[] b = outputStream.toByteArray();
return new ResponseEntity<>(b, headers, HttpStatus.OK);
}
}