diff --git a/maxkey-authentications/maxkey-authentication-captcha/build.gradle b/maxkey-authentications/maxkey-authentication-captcha/build.gradle index af2fb3553..1524a6250 100644 --- a/maxkey-authentications/maxkey-authentication-captcha/build.gradle +++ b/maxkey-authentications/maxkey-authentication-captcha/build.gradle @@ -4,10 +4,5 @@ description = "maxkey-authentication-captcha" dependencies { //local jars - implementation fileTree(dir: '../maxkey-lib/', include: '*/*.jar') - - implementation project(":maxkey-common") - implementation project(":maxkey-core") - implementation project(":maxkey-persistence") - + implementation fileTree(dir: '../maxkey-lib/', include: '*/*.jar') } \ No newline at end of file diff --git a/maxkey-authentications/maxkey-authentication-captcha/src/main/java/org/maxkey/autoconfigure/KaptchaAutoConfiguration.java b/maxkey-authentications/maxkey-authentication-captcha/src/main/java/org/maxkey/autoconfigure/KaptchaAutoConfiguration.java index 6ce893f37..48b80259f 100644 --- a/maxkey-authentications/maxkey-authentication-captcha/src/main/java/org/maxkey/autoconfigure/KaptchaAutoConfiguration.java +++ b/maxkey-authentications/maxkey-authentication-captcha/src/main/java/org/maxkey/autoconfigure/KaptchaAutoConfiguration.java @@ -22,7 +22,6 @@ import com.google.code.kaptcha.impl.DefaultKaptcha; import com.google.code.kaptcha.util.Config; import java.io.IOException; import java.util.Properties; -import org.maxkey.constants.ConstantsProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; @@ -36,6 +35,7 @@ import org.springframework.core.io.Resource; public class KaptchaAutoConfiguration implements InitializingBean { private static final Logger _logger = LoggerFactory.getLogger(KaptchaAutoConfiguration.class); + public static final String kaptchaPropertySource = "/kaptcha.properties"; /** * Captcha Producer Config . * @return Producer @@ -43,8 +43,7 @@ public class KaptchaAutoConfiguration implements InitializingBean { */ @Bean (name = "captchaProducer") public Producer captchaProducer() throws IOException { - Resource resource = new ClassPathResource( - ConstantsProperties.classPathResource(ConstantsProperties.kaptchaPropertySource)); + Resource resource = new ClassPathResource(kaptchaPropertySource); _logger.debug("Kaptcha config file " + resource.getURL()); DefaultKaptcha kaptcha = new DefaultKaptcha(); Properties properties = new Properties(); diff --git a/maxkey-authentications/maxkey-authentication-captcha/src/main/java/org/maxkey/web/contorller/ImageCaptchaEndpoint.java b/maxkey-authentications/maxkey-authentication-captcha/src/main/java/org/maxkey/web/contorller/ImageCaptchaEndpoint.java index 6ce9e8d88..6fc8a6a88 100644 --- a/maxkey-authentications/maxkey-authentication-captcha/src/main/java/org/maxkey/web/contorller/ImageCaptchaEndpoint.java +++ b/maxkey-authentications/maxkey-authentication-captcha/src/main/java/org/maxkey/web/contorller/ImageCaptchaEndpoint.java @@ -19,13 +19,16 @@ package org.maxkey.web.contorller; import com.google.code.kaptcha.Producer; import java.awt.image.BufferedImage; +import java.io.IOException; +import javax.imageio.ImageIO; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.maxkey.web.WebConstants; -import org.maxkey.web.image.AbstractImageEndpoint; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -36,11 +39,19 @@ import org.springframework.web.bind.annotation.RequestMapping; * */ @Controller -public class ImageCaptchaEndpoint extends AbstractImageEndpoint { +public class ImageCaptchaEndpoint { private static final Logger _logger = LoggerFactory.getLogger(ImageCaptchaEndpoint.class); + public static final String IMAGE_GIF = "image/gif"; + + public static final String KAPTCHA_SESSION_KEY = "kaptcha_session_key"; + @Autowired private Producer captchaProducer; + + @Value("${maxkey.login.captcha.type}") + private String captchaType; + /** * captcha image Producer. @@ -53,8 +64,7 @@ public class ImageCaptchaEndpoint extends AbstractImageEndpoint { try { String kaptchaText = captchaProducer.createText(); - if (applicationConfig.getLoginConfig().getCaptchaType() - .equalsIgnoreCase("Arithmetic")) { + if (captchaType.equalsIgnoreCase("Arithmetic")) { Integer intParamA = Integer.valueOf(kaptchaText.substring(0, 1)); Integer intParamB = Integer.valueOf(kaptchaText.substring(1, 2)); Integer calculateValue = 0; @@ -68,10 +78,10 @@ public class ImageCaptchaEndpoint extends AbstractImageEndpoint { _logger.trace("Sesssion id " + request.getSession().getId() + " , Arithmetic calculate Value is " + calculateValue); request.getSession().setAttribute( - WebConstants.KAPTCHA_SESSION_KEY, calculateValue + ""); + KAPTCHA_SESSION_KEY, calculateValue + ""); } else { // store the text in the session - request.getSession().setAttribute(WebConstants.KAPTCHA_SESSION_KEY, kaptchaText); + request.getSession().setAttribute(KAPTCHA_SESSION_KEY, kaptchaText); } _logger.trace("Sesssion id " + request.getSession().getId() + " , Captcha Text is " + kaptchaText); @@ -84,9 +94,46 @@ public class ImageCaptchaEndpoint extends AbstractImageEndpoint { } } + /** + * producerImage. + * @param request HttpServletRequest + * @param response HttpServletResponse + * @param bufferedImage BufferedImage + * @throws IOException error + */ + public static void producerImage(HttpServletRequest request, + HttpServletResponse response, + BufferedImage bufferedImage) throws IOException { + // Set to expire far in the past. + response.setDateHeader("Expires", 0); + // Set standard HTTP/1.1 no-cache headers. + response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate"); + // Set IE extended HTTP/1.1 no-cache headers (use addHeader). + response.addHeader("Cache-Control", "post-check=0, pre-check=0"); + // Set standard HTTP/1.0 no-cache header. + response.setHeader("Pragma", "no-cache"); + // return a jpeg/gif + response.setContentType(IMAGE_GIF); + _logger.trace("create the image"); + // create the image + if (bufferedImage != null) { + ServletOutputStream out = response.getOutputStream(); + // write the data out + ImageIO.write(bufferedImage, "gif", out); + try { + out.flush(); + } finally { + out.close(); + } + } + } - public void setCaptchaProducer(Producer captchaProducer) { + public void setCaptchaType(String captchaType) { + this.captchaType = captchaType; + } + + public void setCaptchaProducer(Producer captchaProducer) { this.captchaProducer = captchaProducer; } diff --git a/maxkey-core/src/main/java/org/maxkey/constants/ConstantsProperties.java b/maxkey-core/src/main/java/org/maxkey/constants/ConstantsProperties.java index 322c605d9..95d7f609f 100644 --- a/maxkey-core/src/main/java/org/maxkey/constants/ConstantsProperties.java +++ b/maxkey-core/src/main/java/org/maxkey/constants/ConstantsProperties.java @@ -18,9 +18,6 @@ package org.maxkey.constants; public class ConstantsProperties { - - public static final String kaptchaPropertySource = - "classpath:/kaptcha.properties"; public static String classPathResource(String propertySource) { return propertySource.replaceAll("classpath:","");