最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot?security驗(yàn)證碼的登錄實(shí)例

 更新時(shí)間:2025年03月31日 17:20:10   作者:不識(shí)君的荒漠  
這篇文章主要介紹了springboot?security驗(yàn)證碼的登錄實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

前言

spring boot security自定義認(rèn)證一文,基本給出了一個(gè)完整的自定義的用戶登錄認(rèn)證的示例,但是未涉及到驗(yàn)證的使用,本文介紹登錄的時(shí)候如何使用驗(yàn)證碼。

本文介紹一個(gè)驗(yàn)證碼生成工具,比較老的一個(gè)庫(kù)了,僅作demo使用,不太建議生產(chǎn)用了,因?yàn)槿绻愕拇a需要進(jìn)行安全掃描,這個(gè)庫(kù)已經(jīng)不再維護(hù)了,如果掃出漏洞,也沒法升級(jí)修復(fù)了。

但是如果沒有安全掃描的要求,還是可以用的。

github: https://github.com/penggle/kaptcha

代碼示例

引入依賴

		<dependency>
			<groupId>com.github.penggle</groupId>
			<artifactId>kaptcha</artifactId>
			<version>2.3.2</version>
		</dependency>

定義驗(yàn)證碼生成器

@Configuration
public class CaptchaConfiguration {


    @Bean
    public Producer defaultKaptcha() {
        Properties properties = new Properties();
        // 還有一些其它屬性,可以進(jìn)行源碼自己看相關(guān)配置,比較清楚了,根據(jù)變量名也能猜出來(lái)什么意思了
        properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, "150");
        properties.setProperty(Constants.KAPTCHA_IMAGE_HEIGHT, "50");
        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_STRING, "0123456789abcdefghigklmnopqrstuvwxyz");
        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
        Config config = new Config(properties);
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}

示例是作為spring 的bean注冊(cè)到spring 容器了,當(dāng)然也可以作為一個(gè)單例對(duì)象放到一個(gè)靜態(tài)類里。

定義獲取驗(yàn)證碼及認(rèn)證接口

這個(gè)接口在前面的文章里已經(jīng)提到過了,這里只是完善驗(yàn)證碼的部分.

@RequestMapping("/login")
@RestController
public class LoginController {

    private final AuthenticationManager authenticationManager;

    private final Producer producer;

    public LoginController(AuthenticationManager authenticationManager, Producer producer) {
        this.authenticationManager = authenticationManager;
        this.producer = producer;
    }

    @PostMapping()
    public Object login(@RequestBody User user, HttpSession session) {
        Object captcha = session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
        if (captcha == null || !captcha.toString().equalsIgnoreCase(user.getCaptcha())) {
            return "captcha is not correct.";
        }
        try {
            // 使用定義的AuthenticationManager進(jìn)行認(rèn)證處理
            Authentication authenticate = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword()));
            // 認(rèn)證通過,設(shè)置到當(dāng)前上下文,如果當(dāng)前認(rèn)證過程后續(xù)還有處理的邏輯需要的話。這個(gè)示例是沒有必要了
            SecurityContextHolder.getContext().setAuthentication(authenticate);
            return "login success";
        } catch (Exception e) {
            return "login failed";
        }
    }

    /**
     * 獲取驗(yàn)證碼,需要的話,可以提供一個(gè)驗(yàn)證碼獲取的接口,在上面的login里把驗(yàn)證碼傳進(jìn)來(lái)進(jìn)行比對(duì)
     */
    @GetMapping("/captcha")
    public void captcha(HttpServletResponse response, HttpSession session) throws IOException {
        response.setContentType("image/jpeg");
        String text = producer.createText();
        session.setAttribute(Constants.KAPTCHA_SESSION_KEY, text);
        BufferedImage image = producer.createImage(text);
        try (ServletOutputStream out = response.getOutputStream()) {
            ImageIO.write(image, "jpg", out);
        }
    }
}

測(cè)試

看一下效果,

獲取驗(yàn)證碼

登錄

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決jasperreport導(dǎo)出的pdf每頁(yè)顯示的記錄太少問題

    解決jasperreport導(dǎo)出的pdf每頁(yè)顯示的記錄太少問題

    這篇文章主要介紹了解決jasperreport導(dǎo)出的pdf每頁(yè)顯示的記錄太少問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • JAVA實(shí)戰(zhàn)練習(xí)之圖書管理系統(tǒng)實(shí)現(xiàn)流程

    JAVA實(shí)戰(zhàn)練習(xí)之圖書管理系統(tǒng)實(shí)現(xiàn)流程

    隨著網(wǎng)絡(luò)技術(shù)的高速發(fā)展,計(jì)算機(jī)應(yīng)用的普及,利用計(jì)算機(jī)對(duì)圖書館的日常工作進(jìn)行管理勢(shì)在必行,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)圖書管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-10-10
  • 如何用120行Java代碼寫一個(gè)自己的區(qū)塊鏈

    如何用120行Java代碼寫一個(gè)自己的區(qū)塊鏈

    這篇文章就是幫助你使用 Java 語(yǔ)言來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的區(qū)塊鏈,用不到 120 行代碼來(lái)揭示區(qū)塊鏈的原理,感興趣的就一起來(lái)了解一下
    2019-06-06
  • Spring框架之IOC介紹講解

    Spring框架之IOC介紹講解

    IOC-Inversion of Control,即控制反轉(zhuǎn)。它不是什么技術(shù),而是一種設(shè)計(jì)思想。這篇文章將為大家介紹一下Spring控制反轉(zhuǎn)IOC的原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java 中 String、StringBuffer、StringBuilder 的區(qū)別

    Java 中 String、StringBuffer、StringBuilder 的區(qū)別

    本文主要介紹了Java 中 String、StringBuffer、StringBuilder 的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-05-05
  • SpringBoot如何使用Undertow做服務(wù)器

    SpringBoot如何使用Undertow做服務(wù)器

    這篇文章主要介紹了SpringBoot如何使用Undertow做服務(wù)器,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • MyBatis中的N+1問題的解決方法

    MyBatis中的N+1問題的解決方法

    本文主要介紹了MyBatis中的N+1問題的四種解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 詳解JAVA中獲取文件MD5值的四種方法

    詳解JAVA中獲取文件MD5值的四種方法

    這篇文章主要介紹了JAVA中獲取文件MD5值的四種方法,獲取文件MD5值主要分為三個(gè)步驟,第一步獲取文件的byte信息,第二步通過MessageDigest類進(jìn)行MD5加密,第三步轉(zhuǎn)換成16進(jìn)制的MD5碼值,需要的朋友可以參考下
    2022-08-08
  • Quarkus篇入門創(chuàng)建項(xiàng)目搭建debug環(huán)境

    Quarkus篇入門創(chuàng)建項(xiàng)目搭建debug環(huán)境

    這篇文章主要為大家介紹了Quarkus篇入門創(chuàng)建項(xiàng)目搭建debug環(huán)境,先來(lái)一套hello?world,來(lái)搭建基本的運(yùn)行及調(diào)試環(huán)境吧
    2022-02-02
  • 淺談Mybatis版本升級(jí)踩坑及背后原理分析

    淺談Mybatis版本升級(jí)踩坑及背后原理分析

    這篇文章主要介紹了淺談Mybatis版本升級(jí)踩坑及背后原理分析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論

达拉特旗| 前郭尔| 宁城县| 牟定县| 芦山县| 静宁县| 怀柔区| 扎鲁特旗| 清镇市| 永和县| 多伦县| 兴国县| 柘城县| 乌鲁木齐市| 武定县| 新丰县| 卢龙县| 米脂县| 山西省| 杭锦旗| 镇远县| 平顶山市| 郴州市| 县级市| 刚察县| 巍山| 瓮安县| 山东省| 开化县| 囊谦县| 南汇区| 汽车| 张家口市| 佛山市| 闻喜县| 保康县| 长阳| 全椒县| 定日县| 怀仁县| 宁海县|