文档章节

验证码 kaptcha之springboot用法

voole
 voole
发布于 2017/04/12 10:46
字数 727
阅读 18
收藏 2

在我们用户登录的时候,为了安全性考虑,会增加验证码的功能,这里采用的是google的kaptcha;spirngboot是轻便,独立,使得基于spring的应用开发变得特别简单。网上有很多介绍springboot的有点,这里不多说。言归正抓,讲下登陆时验证码结合springboot的用法

引入kaptcha所需要的jar包,我这里用的是maven

<dependency>  
            <groupId>com.github.penggle</groupId>  
            <artifactId>kaptcha</artifactId>  
            <version>2.3.2</version>  
              
            <exclusions>  
                <exclusion>  
                    <artifactId>javax.servlet-api</artifactId>  
                    <groupId>javax.servlet</groupId>  
                </exclusion>  
            </exclusions>  
        </dependency> 

去除包中自带的servlet包。在我个人的理解中springboot就是javaconfig和注解搭建起来的轻型的微架构。

 

下面是kapcha的javaconfig

@Configuration  
public class CaptchaConfig {  
      
  
    @Bean(name="captchaProducer")  
    public DefaultKaptcha getKaptchaBean(){  
        DefaultKaptcha defaultKaptcha=new DefaultKaptcha();  
        Properties properties=new Properties();  
        properties.setProperty("kaptcha.border", "yes");  
        properties.setProperty("kaptcha.border.color", "105,179,90");  
        properties.setProperty("kaptcha.textproducer.font.color", "blue");  
        properties.setProperty("kaptcha.image.width", "125");  
        properties.setProperty("kaptcha.image.height", "45");  
        properties.setProperty("kaptcha.session.key", "code");  
        properties.setProperty("kaptcha.textproducer.char.length", "4");  
        properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");          
        Config config=new Config(properties);  
        defaultKaptcha.setConfig(config);  
        return defaultKaptcha;  
    }  
}  

这里的的katcha的javaconfig相当于springmvc中的bean配置,下面给是一个针对上面javaconfig的springmvc的bean示例,供参考

<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">    
        <property name="config">    
            <bean class="com.google.code.kaptcha.util.Config">    
                <constructor-arg>    
                    <props>    
                        <prop key="kaptcha.border">yes</prop>    
                        <prop key="kaptcha.border.color">105,179,90</prop>    
                        <prop key="kaptcha.textproducer.font.color">blue</prop>    
                        <prop key="kaptcha.image.width">125</prop>    
                        <prop key="kaptcha.image.height">45</prop>    
                        <prop key="kaptcha.textproducer.font.size">45</prop>    
                        <prop key="kaptcha.session.key">code</prop>    
                        <prop key="kaptcha.textproducer.char.length">4</prop>    
                        <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>    
                    </props>    
                </constructor-arg>    
            </bean>    
        </property>    
    </bean>  

其中构造方法中的属性参数可以根据自己的需求来设置。

配置文件已经配好,那么如何获取自己的二维码呢,我的理解是画布的概念,然后将生成的四位的验证码生成对应的画布,然后让结果write出去。代码如下:

@RequestMapping(value = "/captcha-image")  
    public ModelAndView 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 = captchaProducer.createText();  
        System.out.println("capText: " + capText);  
  
        try {  
            String uuid=UUIDUtils.getUUID32().trim().toString();              
            redisTemplate.opsForValue().set(uuid, capText,60*5,TimeUnit.SECONDS);  
            Cookie cookie = new Cookie("captchaCode",uuid);  
            response.addCookie(cookie);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
  
          
  
        BufferedImage bi = captchaProducer.createImage(capText);  
        ServletOutputStream out = response.getOutputStream();  
        ImageIO.write(bi, "jpg", out);  
        try {  
            out.flush();  
        } finally {  
            out.close();  
        }  
        return null;  
    }  

如上面的代码,在用户登录的时候使用验证码以及cooike中的captchacode来实现唯一性验证,开始的时候我考虑到放到session中,当时想了下,感觉这不科学啊,比如讲captchacode放到session中,这时候验证码是一个,后来另一个用户再登陆,前一个用户还在登陆中,这时候会出现一系列的问题。这里使用cookie和redis,来应对用户的并发登陆验证。

 

页面使用也比较简单如下:

<div style="float: left;">  
   <i><img style="height:22px;" id="codeImg" alt="点击更换" title="点击更换" src="code/captcha-image" /></i>  
</div>  

更换的话加一个click事件,然后清空以前在redis中对应的缓存数据;或者在获取验证码的时候,设置生存周期。

 

大概方法,如上,不对之处,敬请指正

本文转载自:http://blog.csdn.net/liunian02050328/article/details/53462053

voole

voole

粉丝 16
博文 107
码字总数 4434
作品 1
海淀
私信 提问
springboot整合kaptcha验证码

前言: 关于kaptcha简介以及spring整合kaptcha,我在另一篇文章中已详细讲解,请参考:spring整合kaptcha验证码。 本文将介绍springboot整合kaptcha的两种方式。 开发工具及技术: 1、idea 2017...

贪挽懒月
2018/05/10
0
0
苞米豆 — 谷歌验证码快速启动器 1.1.0 发布

https://gitee.com/baomidou/kaptcha-spring-boot-starter 修复了一个重复校验引起的Np bug 支持了jdk 1.7 简介 kaptcha-spring-boot-starter 基于 springBoot 和 Google Kaptcha 验证码组件......

小锅盖
2018/07/20
2.3K
10
Guns 2.0 基于 SpringBoot 全面升级,做简洁的管理系统

Guns V2.0 新版Guns基于SpringBoot全面升级,完美整合springmvc + shiro + mybatis-plus + beetl! 在不用写xml配置(V1.0)的基础上进一步简化项目配置,让您更专注于业务开发!抛弃传统spring xm...

stylefeng
2017/05/26
7.3K
14
SpringBoot 整合(六)Security & Oauth2.0(完整篇)

1. 快速实现篇(实现最基本的登录): SpringSecurity 快速实现项目 2. 企业级封装篇 我的 Spring Security 文集 SpringBoot 整合 Security(一)实现用户认证并判断返回json还是view SpringBo...

FantJ
2018/05/22
0
0
springboot情操陶冶-初识springboot

前言:springboot由于其轻便和去配置化等的特性已经被广泛应用,基于时代潮流以及不被鄙视,笔者于是开辟此篇开始认识springboot 前话 springboot是基于spring而开发的轻量级框架,所以在学习...

南柯问天
2018/07/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C# 视频多人脸识别的实现过程

整个项目是用虹软技术完成开发 上一篇内容的调整,提交到git了,https://github.com/catzhou2002/ArcFaceDemo 基本思路如下: 一、识别线程 1.获取当前图片 2.识别当前图片的人脸位置,并将结...

是哇兴哥棒棒哒
刚刚
0
0
Spring Cloud Eureka 你还在让它裸奔吗??

前些天栈长在微信公众号Java技术栈分享了 Spring Cloud Eureka 最新版 实现注册中心的实战教程:Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!,成功进入 Eureka 控制台页面。 ...

Java技术栈
17分钟前
1
0
linux gyp ERR! stack Error: EACCES: permission denied, mkdir ‘xxx’

在使用linux npm install的出现这个错误了,百度了下,没有权限加个参数即可 npm install --unsafe-perm

朝如青丝暮成雪
18分钟前
0
0
使用kubeadm 搭建K8s集群

1. 参考官网 https://kubernetes.io/docs/setup/independent/install-kubeadm/

whhbb
46分钟前
2
0
Dubbo 3.0 !提升不止一点点!

Dubbo 自 2011 年 10 月 27 日开源后,已被许多非阿里系的公司使用,其中既有当当网、网易考拉等互联网公司,也不乏中国人寿、青岛海尔等大型传统企业。 自去年 12 月开始,Dubbo 3.0 便已正...

编程SHA
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部