mirror of
https://gitee.com/dromara/MaxKey.git
synced 2025-12-07 17:38:32 +08:00
captcha separate
This commit is contained in:
parent
5cbc8049dc
commit
962c50d083
@ -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')
|
||||
}
|
||||
@ -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();
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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:","");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user