package cc.mrbird.febs.common.service; import cc.mrbird.febs.common.entity.FebsConstant; import cc.mrbird.febs.common.entity.ImageType; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.properties.FebsProperties; import cc.mrbird.febs.common.properties.ValidateCodeProperties; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.wf.captcha.GifCaptcha; import com.wf.captcha.SpecCaptcha; import com.wf.captcha.base.Captcha; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.*; import java.util.stream.Collectors; /** * 验证码服务 * * @author MrBird */ @Service @RequiredArgsConstructor public class ValidateCodeService { private final RedisService redisService; private final FebsProperties properties; public void create(HttpServletRequest request, HttpServletResponse response) throws IOException { HttpSession session = request.getSession(); String key = session.getId(); ValidateCodeProperties code = properties.getCode(); setHeader(response, code.getType()); Captcha captcha = createCaptcha(code); redisService.set(FebsConstant.CODE_PREFIX + key, StringUtils.lowerCase(captcha.text()), code.getTime()); captcha.out(response.getOutputStream()); } public void check(String key, String value) throws FebsException { Object codeInRedis = redisService.get(FebsConstant.CODE_PREFIX + key); if (StringUtils.isBlank(value)) { throw new FebsException("请输入验证码"); } if (codeInRedis == null) { throw new FebsException("验证码已过期"); } if (!StringUtils.equalsIgnoreCase(value, String.valueOf(codeInRedis))) { throw new FebsException("验证码不正确"); } } private Captcha createCaptcha(ValidateCodeProperties code) { Captcha captcha; if (StringUtils.equalsIgnoreCase(code.getType(), ImageType.GIF)) { captcha = new GifCaptcha(code.getWidth(), code.getHeight(), code.getLength()); } else { captcha = new SpecCaptcha(code.getWidth(), code.getHeight(), code.getLength()); } captcha.setCharType(code.getCharType()); return captcha; } private void setHeader(HttpServletResponse response, String type) { if (StringUtils.equalsIgnoreCase(type, ImageType.GIF)) { response.setContentType(MediaType.IMAGE_GIF_VALUE); } else { response.setContentType(MediaType.IMAGE_PNG_VALUE); } response.setHeader(HttpHeaders.PRAGMA, "No-cache"); response.setHeader(HttpHeaders.CACHE_CONTROL, "No-cache"); response.setDateHeader(HttpHeaders.EXPIRES, 0L); } // public static void main(String[] args) { // List lists = new ArrayList<>(); //// lists.add(1); //// lists.add(2); //// lists.add(3); //// lists.add(4); // System.out.println(lists); // List collect = lists // .stream() // .filter(list -> 1 == list) // .collect(Collectors.toList()); // // System.out.println(collect); // // List collect1 = lists.stream().filter( // list -> { // if (1 != list) { // return true; // } // return false; // } // ).collect(Collectors.toList()); // // System.out.println(collect1); // // // List list2 = new ArrayList<>(); // Random rd = new Random(); // for (int i = 0; i < 100; i++) { // list2.add(rd.nextInt(101));// 随机产生一个[0,100]的数字 // } // System.out.println(list2); // // 流处理, 进行数据处理 // DoubleSummaryStatistics ds = list2.stream().collect(Collectors.summarizingDouble(e -> e)); // Map> collect2 = list2.stream().collect(Collectors.partitioningBy(e -> e >= 60)); // Map> collect3 = list2.stream().collect(Collectors.partitioningBy(e -> e >= 80)); // Map> collect4 = list2.stream().collect(Collectors.partitioningBy(e -> e >= 200)); // System.out.println("平均分"+ds.getAverage()); // System.out.println("最高分"+ds.getMax()); // System.out.println("最低分"+ds.getMin()); // System.out.println("总分"+ds.getSum()); // System.out.println("人数"+ds.getCount()); // System.out.println("大于60分"+collect2.toString()); // System.out.println("大于80分"+collect3.get(true).toString()); // System.out.println("大于90分"+collect4.get(true).toString()); // JSONObject jsonObject = JSONUtil.parseObj(collect2); // System.out.println(jsonObject); // // } }