Heim > Java > javaLernprogramm > Hauptteil

Wie SpringBoot Kaptcha verwendet, um die Generierung von Verifizierungscodes und Verifizierungsfunktionen zu implementieren

王林
Freigeben: 2023-05-13 10:28:13
nach vorne
1706 Leute haben es durchsucht

Wenn wir uns anmelden und den Bestätigungscode im Projekt verwenden, können wir auch Kaptcha ausprobieren, um den Bestätigungscode zu generieren. Das ist sehr einfach.

1 Zuerst führen wir die Maven-Abhängigkeit von Kaptcha in pom.xml ein Datei

<!-- kaptcha验证码 -->
<dependency>
	<groupId>com.github.penggle</groupId>
	<artifactId>kaptcha</artifactId>
	<version>2.3.2</version>
</dependency>
Nach dem Login kopieren

2. Dann schreiben wir die Konfigurationsklasse von kaptcha: KaptchaConfig.java

package com.lzzy.meet.common.kaptcha;
 
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import java.util.Properties;
 
/**
 * @ClassName KaptchaConfig
 * kaptcha配置类
 * @Author 
 * @Date 2019-09-05 13:50:50
 * @Version 1.0
 **/
@Slf4j
@Component
public class KaptchaConfig {
 
    @Bean
    public DefaultKaptcha getKaptcheCode() {
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        Properties properties = new Properties();
        properties.setProperty("kaptcha.border", "no");
        properties.setProperty("kaptcha.textproducer.font.color", "black");
        properties.setProperty("kaptcha.image.width", "100");
        properties.setProperty("kaptcha.image.height", "36");
        properties.setProperty("kaptcha.textproducer.font.size", "30");
        properties.setProperty("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.ShadowGimpy");
        properties.setProperty("kaptcha.session.key", "code");
        properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");
        properties.setProperty("kaptcha.background.clear.from", "232,240,254");
        properties.setProperty("kaptcha.background.clear.to", "232,240,254");
        properties.setProperty("kaptcha.textproducer.char.length", "4");
        properties.setProperty("kaptcha.textproducer.font.names", "彩云,宋体,楷体,微软雅黑");
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}
Nach dem Login kopieren

3. Als nächstes schreiben wir die Kontrollschicht von kaptcha: KaptchaController.java

package com.lzzy.meet.common.kaptcha;
 
import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
 
/**
 * @ClassName KaptchaController
 * kaptcha调用
 * @Author 
 * @Date 2019-09-05 13:59:59
 * @Version 1.0
 **/
@Slf4j
@Controller
@RequestMapping("kaptcha")
public class KaptchaController {
 
    @Autowired
    private Producer producer;
 
    @GetMapping("kaptcha-image")
    public void getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {
        response.setDateHeader("Expires", 0);
        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
        response.addHeader("Cache-Control", "post-check=0, pre-check=0");
        response.setHeader("Pragma", "no-cache");
        response.setContentType("image/jpeg");
        String capText = producer.createText();
        log.info("******************当前验证码为:{}******************", capText);
        // 将验证码存于session中
        request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
        BufferedImage bi = producer.createImage(capText);
        ServletOutputStream out = response.getOutputStream();
        // 向页面输出验证码
        ImageIO.write(bi, "jpg", out);
        try {
        	// 清空缓存区
            out.flush();
        } finally {
        	// 关闭输出流
            out.close();
        }
    }
}
Nach dem Login kopieren

4 das Frontend zum Generieren des Bestätigungscodes:

<img  th:src="@{/kaptcha/kaptcha-image}" class="ver_btn" onclick="this.src=this.src+&#39;?c=&#39;+Math.random();"/ alt="Wie SpringBoot Kaptcha verwendet, um die Generierung von Verifizierungscodes und Verifizierungsfunktionen zu implementieren" >
Nach dem Login kopieren

Da ich hier die Thymeleaf-Vorlagen-Engine verwende, wird der Pfadname etwas seltsam sein. Der Stil des generierten Bestätigungscodes ist wie in der Abbildung dargestellt:

Wie SpringBoot Kaptcha verwendet, um die Generierung von Verifizierungscodes und Verifizierungsfunktionen zu implementieren

5. Abschließend geben wir den vom Benutzer beim Anmelden am Client eingegebenen Bestätigungscode ein. Zur Überprüfung an den Server senden:

/**
	 * 验证验证码
	 * @param
	 * @return 正确:true/错误:false
	 */
	public static boolean validate(String registerCode) {
		// 获取Session中验证码
		Object captcha = ServletUtils.getAttribute(Constants.KAPTCHA_SESSION_KEY);
		// 判断验证码是否为空
		if (StringUtils.isEmpty(registerCode)) {
			return false;
		}
		// 校验验证码的正确与否
		boolean result = registerCode.equalsIgnoreCase(captcha.toString());
		if (result) {
			// 正确了后,将验证码从session中删掉
			ServletUtils.getRequest().getSession().removeAttribute(Constants.KAPTCHA_SESSION_KEY);
		}
		// 返回验证结果
		return result;
	}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie SpringBoot Kaptcha verwendet, um die Generierung von Verifizierungscodes und Verifizierungsfunktionen zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage