开源的验证码框架Kaptcha实现验证码效果

本项目是通过maven创建的,首先需要导入Kaptcha的jar包,然后在spring中配置Kaptcha的属性,还需要实现一个生成验证码的controller类,最后在前端显示。

pom.xml导包:

  
     com.github.penggle  
     kaptcha  
     2.3.2  
     
配置 Kaptcha的 spring文件,我这里是新建一个spring- Kaptcha.xml文件
  
          
              
                  
                      
                          
                        110  
                          
                        50  
                          
                        0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ  
                          
                        4  
                          
                        no  
                          
                        105,179,90  
                          
                        1  
                          
                        black  
                          
                        30  
                          
                        楷体  
                          
                        black  
                          
                        3  
                          
                        com.google.code.kaptcha.impl.ShadowGimpy  
                      
                  
              
          
      

实现一个生成验证码的controller类
[java] view plain copy
/** 
 * Created by xuweijie on 2017/3/8. 
 * 生成验证码Controller. 
 */  
@Controller  
public class CaptchaController {  
  
    private Producer kaptchaProducer=null;  
  
    @Autowired  
    public void setCaptchaProducer(Producer kaptchaProducer) {  
        this.kaptchaProducer = kaptchaProducer;  
    }  
  
    @RequestMapping("/kaptcha")  
    public ModelAndView handleRequest(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 = kaptchaProducer.createText();  
        request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);  
        BufferedImage bi = kaptchaProducer.createImage(capText);  
        ServletOutputStream out = response.getOutputStream();  
        ImageIO.write(bi, "jpg", out);  
        try {  
            out.flush();  
        } finally {  
            out.close();  
        }  
        return null;  
    }  
}  


前端:这里有的js函数的作用是当点击验证码图片的时候会更新验证码
[html] view plain copy
<%@ page contentType="text/html;charset=UTF-8" language="java" %>  
  
  
    用户登录  
      
  
  
  



登录




用 户 名:


密 码:

验 证 码:

最后一步就是做判断验证码输入正不正确啦,由于本项目集成了shiro,所以逻辑是当验证码通过后再去执行shiro的登录认证 [java] view plain copy @RequestMapping(value = "/login",method = RequestMethod.POST) public String login(HttpServletRequest request, Model model){ CustomException customException=null; String verifyCode=request.getParameter("verifyCode").toUpperCase(); String username=request.getParameter("username"); String password=request.getParameter("password"); //判断验证码输入是否正确 if(verifyCode.equals(request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY))){ if((username!=null && password!=null)){ UsernamePasswordToken token=new UsernamePasswordToken(username,password); Subject subject= SecurityUtils.getSubject(); try{ subject.login(token); }catch (AuthenticationException e){ customException=new CustomException(e.getMessage()); } if( subject.isAuthenticated()){ subject.logout(); model.addAttribute("username",username); return "/loginsuccess"; }else { model.addAttribute("exception",customException.getMessage()); return "/refuse"; } } }else { System.out.print("验证码输入不正确"); } return "login"; }




你可能感兴趣的:(identifying,code)