hh 8 سال پیش
والد
کامیت
f8f0596d9e
1فایلهای تغییر یافته به همراه108 افزوده شده و 108 حذف شده
  1. 108 108
      src/main/java/com/yihu/wlyy/web/common/util/CaptchaController.java

+ 108 - 108
src/main/java/com/yihu/wlyy/web/common/util/CaptchaController.java

@ -1,108 +1,108 @@
//package com.yihu.wlyy.web.common.util;
//
//import com.google.code.kaptcha.impl.DefaultKaptcha;
//import com.google.code.kaptcha.util.Config;
//import com.yihu.wlyy.web.BaseController;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation;
//import org.springframework.http.MediaType;
//import org.springframework.web.bind.annotation.*;
//import sun.misc.BASE64Encoder;
//
//import javax.imageio.ImageIO;
//import java.awt.image.BufferedImage;
//import java.io.ByteArrayOutputStream;
//import java.io.IOException;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.Properties;
//import java.util.UUID;
//import java.util.concurrent.ConcurrentHashMap;
//
///**
// * 患者端验证码生成控制器。验证码生成后保存到Redis中,并将Redis的Key与图片路径返回。
// * 客户端获取图片,并由用户输入后,与redis的key一块返回,用于验证是否出错。
// *
// * @author Sand
// * @created 2016/09/28
// */
//@Api(description = "验证码")
//@RestController
//@RequestMapping(value = "/patient/captcha", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
//public class CaptchaController extends BaseController {
//    private Map<String, String> captchaCache = new ConcurrentHashMap<>();
//    private DefaultKaptcha captchaProducer = new DefaultKaptcha();
//
//    public CaptchaController() {
//        Properties properties = new Properties();
//        properties.put("kaptcha.textproducer.font.color", "blue");
//        properties.put("kaptcha.textproducer.font.size", "45");
//        properties.put("kaptcha.textproducer.char.length", "4");
//        properties.put("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
//
//        Config config = new Config(properties);
//        captchaProducer.setConfig(config);
//    }
//
//    @RequestMapping(method = RequestMethod.GET)
//    @ApiOperation("生成验证码,用于第一次请求")
//    public String createCaptcha(){
//        try{
//            return generateCaptcha();
//        } catch (Exception e){
//            return error(500, e.getMessage());
//        }
//    }
//
//    @RequestMapping(value = "/{legacy_key}", method = RequestMethod.POST)
//    @ApiOperation("刷新验证码,需提供第一次生成验证码返回的key")
//    public String refreshCaptcha(@PathVariable("legacy_key") String legacyKey){
//        try{
//            cleanCaptcha(legacyKey);
//
//            return generateCaptcha();
//        } catch (Exception e){
//            return error(500, e.getMessage());
//        }
//    }
//
//    @RequestMapping(value = "/{key}", method = RequestMethod.GET)
//    @ApiOperation("校验证码,提供key及用户输入的验证码")
//    public String verifyCaptcha(@PathVariable("key") String key,
//                                @RequestParam("text") String text){
//        try{
//            boolean pass = false;
//            String captcha = captchaCache.get(key);
//            if (captcha != null && captcha.equals(text.toLowerCase())){
//                pass = true;
//                cleanCaptcha(key);
//            }
//
//            return write(200, "ok", "pass", pass);
//        } catch (Exception e){
//            return error(500, e.getMessage());
//        }
//    }
//
//    private String generateCaptcha() throws IOException {
//        String captchaText = captchaProducer.createText();
//        BufferedImage image = captchaProducer.createImage(captchaText);
//        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//        ImageIO.write(image, "png", outputStream);
//        String base64Img = new BASE64Encoder().encode(outputStream.toByteArray());
//        String key = "captcha:" + UUID.randomUUID().toString() + ":text";
//
//        Map<String, String> data = new HashMap<>();
//        data.put("key", key);
//        data.put("image", base64Img);
//        data.put("format", "png");
//
//        captchaCache.put(key, captchaText.toLowerCase());
//
//        return write(200, "ok", "data", data);
//    }
//
//    private void cleanCaptcha(String key){
//        captchaCache.remove(key);
//    }
//}
package com.yihu.wlyy.web.common.util;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import sun.misc.BASE64Encoder;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
/**
 * 患者端验证码生成控制器。验证码生成后保存到Redis中,并将Redis的Key与图片路径返回。
 * 客户端获取图片,并由用户输入后,与redis的key一块返回,用于验证是否出错。
 *
 * @author Sand
 * @created 2016/09/28
 */
@Api(description = "验证码")
@RestController
@RequestMapping(value = "/patient/captcha", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class CaptchaController extends BaseController {
    private Map<String, String> captchaCache = new ConcurrentHashMap<>();
    private DefaultKaptcha captchaProducer = new DefaultKaptcha();
    public CaptchaController() {
        Properties properties = new Properties();
        properties.put("kaptcha.textproducer.font.color", "blue");
        properties.put("kaptcha.textproducer.font.size", "45");
        properties.put("kaptcha.textproducer.char.length", "4");
        properties.put("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
        Config config = new Config(properties);
        captchaProducer.setConfig(config);
    }
    @RequestMapping(method = RequestMethod.GET)
    @ApiOperation("生成验证码,用于第一次请求")
    public String createCaptcha(){
        try{
            return generateCaptcha();
        } catch (Exception e){
            return error(500, e.getMessage());
        }
    }
    @RequestMapping(value = "/{legacy_key}", method = RequestMethod.POST)
    @ApiOperation("刷新验证码,需提供第一次生成验证码返回的key")
    public String refreshCaptcha(@PathVariable("legacy_key") String legacyKey){
        try{
            cleanCaptcha(legacyKey);
            return generateCaptcha();
        } catch (Exception e){
            return error(500, e.getMessage());
        }
    }
    @RequestMapping(value = "/{key}", method = RequestMethod.GET)
    @ApiOperation("校验证码,提供key及用户输入的验证码")
    public String verifyCaptcha(@PathVariable("key") String key,
                                @RequestParam("text") String text){
        try{
            boolean pass = false;
            String captcha = captchaCache.get(key);
            if (captcha != null && captcha.equals(text.toLowerCase())){
                pass = true;
                cleanCaptcha(key);
            }
            return write(200, "ok", "pass", pass);
        } catch (Exception e){
            return error(500, e.getMessage());
        }
    }
    private String generateCaptcha() throws IOException {
        String captchaText = captchaProducer.createText();
        BufferedImage image = captchaProducer.createImage(captchaText);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ImageIO.write(image, "png", outputStream);
        String base64Img = new BASE64Encoder().encode(outputStream.toByteArray());
        String key = "captcha:" + UUID.randomUUID().toString() + ":text";
        Map<String, String> data = new HashMap<>();
        data.put("key", key);
        data.put("image", base64Img);
        data.put("format", "png");
        captchaCache.put(key, captchaText.toLowerCase());
        return write(200, "ok", "data", data);
    }
    private void cleanCaptcha(String key){
        captchaCache.remove(key);
    }
}