CaptchaConfig.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package com.koobietech.eas.config;
  2. import com.anji.captcha.model.common.Const;
  3. import com.anji.captcha.service.CaptchaCacheService;
  4. import com.anji.captcha.service.CaptchaService;
  5. import com.anji.captcha.service.impl.CaptchaServiceFactory;
  6. import com.anji.captcha.util.ImageUtils;
  7. import org.apache.commons.lang3.StringUtils;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.context.annotation.DependsOn;
  11. import org.springframework.core.io.Resource;
  12. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  13. import org.springframework.core.io.support.ResourcePatternResolver;
  14. import org.springframework.util.Base64Utils;
  15. import org.springframework.util.FileCopyUtils;
  16. import java.util.HashMap;
  17. import java.util.Map;
  18. import java.util.Properties;
  19. /**
  20. * @author lc
  21. */
  22. @Configuration
  23. public class CaptchaConfig {
  24. @Bean(name = "AjCaptchaCacheService")
  25. public CaptchaCacheService captchaCacheService() {
  26. return CaptchaServiceFactory.getCache("local");
  27. }
  28. @Bean
  29. @DependsOn("AjCaptchaCacheService")
  30. public CaptchaService captchaService() {
  31. Properties config = new Properties();
  32. config.put(Const.CAPTCHA_CACHETYPE, "local");
  33. config.put(Const.CAPTCHA_WATER_MARK, "爱扣钉");
  34. config.put(Const.CAPTCHA_FONT_TYPE, "宋体");
  35. config.put(Const.CAPTCHA_TYPE, "default");
  36. config.put(Const.CAPTCHA_INTERFERENCE_OPTIONS, "0");
  37. config.put(Const.ORIGINAL_PATH_JIGSAW, "classpath:images/jigsaw");
  38. config.put(Const.ORIGINAL_PATH_PIC_CLICK, "classpath:images/pic-click");
  39. config.put(Const.CAPTCHA_SLIP_OFFSET, "5");
  40. config.put(Const.CAPTCHA_AES_STATUS, "true");
  41. config.put(Const.CAPTCHA_WATER_FONT, "宋体");
  42. config.put(Const.CAPTCHA_CACAHE_MAX_NUMBER, "1000");
  43. config.put(Const.CAPTCHA_TIMING_CLEAR_SECOND, "180");
  44. if ((StringUtils.isNotBlank(config.getProperty(Const.ORIGINAL_PATH_JIGSAW))
  45. && config.getProperty(Const.ORIGINAL_PATH_JIGSAW).startsWith("classpath:"))
  46. || (StringUtils.isNotBlank(config.getProperty(Const.ORIGINAL_PATH_PIC_CLICK))
  47. && config.getProperty(Const.ORIGINAL_PATH_PIC_CLICK).startsWith("classpath:"))) {
  48. config.put(Const.CAPTCHA_INIT_ORIGINAL, "true");
  49. initializeBaseMap(config.getProperty(Const.ORIGINAL_PATH_JIGSAW),
  50. config.getProperty(Const.ORIGINAL_PATH_PIC_CLICK));
  51. }
  52. CaptchaService s = CaptchaServiceFactory.getInstance(config);
  53. return s;
  54. }
  55. private static void initializeBaseMap(String jigsaw, String picClick) {
  56. ImageUtils.cacheBootImage(getResourcesImagesFile(jigsaw + "/original/*.png"),
  57. getResourcesImagesFile(jigsaw + "/slidingBlock/*.png"),
  58. getResourcesImagesFile(picClick + "/*.png"));
  59. }
  60. public static Map<String, String> getResourcesImagesFile(String path) {
  61. Map<String, String> imgMap = new HashMap<>();
  62. ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
  63. try {
  64. Resource[] resources = resolver.getResources(path);
  65. for (Resource resource : resources) {
  66. byte[] bytes = FileCopyUtils.copyToByteArray(resource.getInputStream());
  67. String string = Base64Utils.encodeToString(bytes);
  68. String filename = resource.getFilename();
  69. imgMap.put(filename, string);
  70. }
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. }
  74. return imgMap;
  75. }
  76. }