SpringBoot結合kaptcha驗證碼工具(註解方式)

首先,在pom.xml中加入kaptcha的依賴

<!--驗證碼 -->
		<dependency>
			<groupId>com.github.penggle</groupId>
			<artifactId>kaptcha</artifactId>
			<exclusions>
				<exclusion>
					<artifactId>javax.servlet-api</artifactId>
					<groupId>javax.servlet</groupId>
				</exclusion>
			</exclusions>
		</dependency>

其次,在項目中創建CaptchaConfig類,對驗證碼進行配置。

@Configuration
public class CaptchaConfig
{
    @Bean(name = "captchaProducer")
    public DefaultKaptcha getKaptchaBean()
    {
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        Properties properties = new Properties();
    	// 是否有邊框
        properties.setProperty(KAPTCHA_BORDER, "no");
        // 驗證碼文本字符顏色
        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black");
        // 驗證碼文本字符大小
        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38");
        // KAPTCHA_SESSION_KEY
        properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode");
        // 驗證碼文本字符長度
        properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
        // 驗證碼文本字體樣式 
        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
        // 圖片樣式 
        properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}

接着,編寫Controller類,生成驗證碼。

@Controller
public class CaptchaController {
	
	private static final Logger log = LoggerFactory.getLogger(CaptchaController.class);


	@Resource(name = "captchaProducer")//配置類中的bean
	private Producer captchaProducer;

	@RequestMapping("/captcha")
	public ModelAndView captcha(HttpServletRequest request, HttpServletResponse response) {
		ServletOutputStream out = null;
		try {
			HttpSession session = request.getSession();
			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 capStr = null;
			String code = null;
			BufferedImage bi = null;
			capStr = code = captchaProducer.createText();
			bi = captchaProducer.createImage(capStr);
			log.info("驗證碼:"+code);
			session.setAttribute(Constants.KAPTCHA_SESSION_KEY, code);
			out = response.getOutputStream();
			ImageIO.write(bi, "jpg", out);
			out.flush();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (out != null) {
					out.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return null;
	}
}

然後,編寫頁面代碼,本樣例使用layui。

<form method="post" class="layui-form" >
            <input name="username" placeholder="用戶名"  type="text" lay-verify="required" class="layui-input" >
            <hr class="hr15">
            <input name="password" lay-verify="required" placeholder="密碼"  type="password" class="layui-input">
            <hr class="hr15">
            <img th:src="@{/captcha}" style="height:50px;width:40%;float:left" id="captcha"/>
            <input name="password" lay-verify="required" placeholder="驗證碼"  type="text" class="layui-input" style="width:55%;float:right">
            <hr class="hr15">
            <input class="loginin" value="登錄" lay-submit lay-filter="login" style="width:100%;" type="submit">
        </form>

最後,運行項目,查看效果,並且確認頁面的驗證碼與實際輸出驗證碼一致。

日誌輸出:

INFO  c.p.a.w.c.CaptchaController - [captcha,47] - 驗證碼:pfcd

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章