zoukankan      html  css  js  c++  java
  • jcaptcha配置验证码

    准备开始

    首先导入jar包:jcaptcha-my-1.0

    /**

     * web 常量

     * @author lx

     *

     */

    public abstract class Constants {

    /** 用户 session 的 cookie 名称*/

    public static final String SESSION_ID = "JSESSIONID";

    }

    第一步:创建SessionProvider接口

    cn.itcast.common.web.session.SessionProvider

    public interface SessionProvider {

    public void setAttribute(HttpServletRequest request,String name ,Serializable value);

    //获取Session中的值

    public Serializable getAttribute(HttpServletRequest request,String name);

    //退出登陆

    public void logout(HttpServletRequest request,HttpServletResponse response);

    //获取Session Id

    public String getSessionId(HttpServletRequest request);

    }

    第二步:创建HttpSessionProvider实现类

    cn.itcast.common.web.session.HttpSessionProvider

    /**

     * Session提供类

     * @author lx

     *

     */

    public class HttpSessionProvider implements SessionProvider{

     

     

    //Session中设置值

    public void setAttribute(HttpServletRequest request,String name ,Serializable value){

    HttpSession session = request.getSession();

    if(session != null){

    session.setAttribute(name, value);

    }

    }

    //获取Session中的值

    public Serializable getAttribute(HttpServletRequest request,String name){

    HttpSession session = request.getSession(false);

    if(session != null){

    return (Serializable) session.getAttribute(name);

    }else{

    return null;

    }

    }

    //退出登陆

    public void logout(HttpServletRequest request,HttpServletResponse response){

    HttpSession session = request.getSession(false);

    if(session != null){

    session.invalidate();

    }

    Cookie c  = new Cookie(Constants.SESSION_ID,null);

    c.setMaxAge(0);

    response.addCookie(c);

    }

    //获取Session Id

    public String getSessionId(HttpServletRequest request){

    return request.getRequestedSessionId();

    }

     

    }

    第三步:创建classpath:config/utils.xml

    <!--   session 提供类  -->

    <bean id="sessionProvider"  class="cn.itcast.common.web.session.HttpSessionProvider"/>

    第四步:创建JcaptchaServlet

     

    第五步:创建classpth:config/captcha.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"

    default-lazy-init="true">

     

    <bean id="captchaService" class="com.octo.captcha.service.multitype.GenericManageableCaptchaService">

    <constructor-arg index="0" ref="imageEngine"/>

    <constructor-arg type="int" index="1" value="180"/>

    <constructor-arg type="int" index="2" value="100000"/>

    <constructor-arg type="int" index="3" value="75000"/>

    </bean>

    <bean id="imageEngine" class="com.octo.captcha.engine.GenericCaptchaEngine">

    <constructor-arg index="0">

    <list>

    <ref bean="captchaFactory"/>

    </list>

    </constructor-arg>

    </bean>

     

    <bean id="captchaFactory" class="com.octo.captcha.image.gimpy.GimpyFactory">

    <constructor-arg>

    <ref bean="wordgen"/>

    </constructor-arg>

    <constructor-arg>

    <ref bean="wordtoimage"/>

    </constructor-arg>

    </bean>

     

    <bean id="wordgen" class= "com.octo.captcha.component.word.wordgenerator.RandomWordGenerator">

    <!--可选字符-->

    <constructor-arg>

    <value>aabbccddeefgghhkkmnnooppqqsstuuvvwxxyyzz</value>

    </constructor-arg>

    </bean>

     

    <bean id="wordtoimage" class="com.octo.captcha.component.image.wordtoimage.ComposedWordToImage">

    <constructor-arg index="0">

    <ref bean="fontGenRandom"/>

    </constructor-arg>

    <constructor-arg index="1">

    <ref bean="backGenUni"/>

    </constructor-arg>

    <constructor-arg index="2">

    <ref bean="decoratedPaster"/>

    </constructor-arg>

    </bean>

     

    <bean id="fontGenRandom" class="com.octo.captcha.component.image.fontgenerator.RandomFontGenerator">

    <!--最小字体-->

    <constructor-arg index="0">

    <value>26</value>

    </constructor-arg>

    <!--最大字体-->

    <constructor-arg index="1">

    <value>34</value>

    </constructor-arg>

    <constructor-arg index="2">

    <list>

    <bean class="java.awt.Font">

    <constructor-arg index="0"><value>Arial</value></constructor-arg>

    <constructor-arg index="1"><value>0</value></constructor-arg>

    <constructor-arg index="2"><value>32</value></constructor-arg>

    </bean>

    </list>

    </constructor-arg>

    </bean>

    <bean id="backGenUni" class="com.octo.captcha.component.image.backgroundgenerator.UniColorBackgroundGenerator">

    <!--背景宽度-->

    <constructor-arg index="0">

    <value>110</value>

    </constructor-arg>

    <!--背景高度-->

    <constructor-arg index="1">

    <value>50</value>

    </constructor-arg>

    </bean>

     

    <bean id="decoratedPaster" class="com.octo.captcha.component.image.textpaster.DecoratedRandomTextPaster">

    <!--最大字符长度-->

    <constructor-arg type="java.lang.Integer" index="0">

    <value>4</value>

    </constructor-arg>

    <!--最小字符长度-->

    <constructor-arg type="java.lang.Integer" index="1">

    <value>4</value>

    </constructor-arg>

    <!--文本颜色-->

    <constructor-arg index="2">

    <ref bean="colorGen"/>

    </constructor-arg>

    <!--文本混淆-->

    <constructor-arg index="3">

    <list>

    <!--<ref bean="baffleDecorator"/>-->

    </list>

    </constructor-arg>

    </bean>

    <bean id="baffleDecorator" class="com.octo.captcha.component.image.textpaster.textdecorator.BaffleTextDecorator">

    <constructor-arg type="java.lang.Integer" index="0"><value>1</value></constructor-arg>

    <constructor-arg type="java.awt.Color" index="1"><ref bean="colorWrite"/></constructor-arg>

    </bean>

    <bean id="colorGen" class="com.octo.captcha.component.image.color.SingleColorGenerator">

    <constructor-arg type="java.awt.Color" index="0">

    <ref bean="colorBlack"/>

    </constructor-arg>

    </bean>

    <bean id="colorWrite" class="java.awt.Color">

    <constructor-arg type="int" index="0">

    <value>255</value>

    </constructor-arg>

    <constructor-arg type="int" index="1">

    <value>255</value>

    </constructor-arg>

    <constructor-arg type="int" index="2">

    <value>255</value>

    </constructor-arg>

    </bean>

    <bean id="colorBlack" class="java.awt.Color">

    <constructor-arg type="int" index="0">

    <value>50</value>

    </constructor-arg>

    <constructor-arg type="int" index="1">

    <value>50</value>

    </constructor-arg>

    <constructor-arg type="int" index="2">

    <value>50</value>

    </constructor-arg>

    </bean>

    </beans>

    第六步:编写JcaptchaServlet

    /**

     * 提供验证码图片的Servlet

     */

    @SuppressWarnings("serial")

    public class JcaptchaServlet extends HttpServlet {

    public static final String CAPTCHA_IMAGE_FORMAT = "jpeg";

     

    private ImageCaptchaService captchaService;

    private SessionProvider session;

     

    @Override

    public void init() throws ServletException {

    WebApplicationContext appCtx = WebApplicationContextUtils

    .getWebApplicationContext(getServletContext());

    captchaService = (ImageCaptchaService) BeanFactoryUtils

    .beanOfTypeIncludingAncestors(appCtx, ImageCaptchaService.class);

    session = (SessionProvider) BeanFactoryUtils

    .beanOfTypeIncludingAncestors(appCtx, SessionProvider.class);

    }

     

    @Override

    protected void doGet(HttpServletRequest request,

    HttpServletResponse response) throws ServletException, IOException {

    byte[] captchaChallengeAsJpeg = null;

    // the output stream to render the captcha image as jpeg into

    ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();

    try {

    // get the session id that will identify the generated captcha.

    // the same id must be used to validate the response, the session id

    // is a good candidate!

     

    String captchaId = session.getSessionId(request);

    BufferedImage challenge = captchaService.getImageChallengeForID(

    captchaId, request.getLocale());

    // Jimi.putImage("image/jpeg", challenge, jpegOutputStream);

    ImageIO.write(challenge, CAPTCHA_IMAGE_FORMAT, jpegOutputStream);

    } catch (IllegalArgumentException e) {

    response.sendError(HttpServletResponse.SC_NOT_FOUND);

    return;

    } catch (CaptchaServiceException e) {

    response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

    return;

    }

    // catch (JimiException e) {

    // response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

    // return;

    // }

     

    captchaChallengeAsJpeg = jpegOutputStream.toByteArray();

     

    // flush it in the response

    response.setHeader("Cache-Control", "no-store");

    response.setHeader("Pragma", "no-cache");

    response.setDateHeader("Expires", 0);

    response.setContentType("image/" + CAPTCHA_IMAGE_FORMAT);

     

    ServletOutputStream responseOutputStream = response.getOutputStream();

    responseOutputStream.write(captchaChallengeAsJpeg);

    responseOutputStream.flush();

    responseOutputStream.close();

    }

    }

    第七步:配置web.xml

    <!-- 配置Jcaptcha 验证码-->

    <servlet>

    <servlet-name>jcaptcha</servlet-name>

    <servlet-class>cn.itcast.common.captcha.JcaptchaServlet</servlet-class>

    </servlet>

     

    <servlet-mapping>

    <servlet-name>jcaptcha</servlet-name>

    <url-pattern>/captcha.svl</url-pattern>

    </servlet-mapping>

    第八步:编写登陆页面front_page/buyer/login.jsp

    <li>

    <label for="captcha">验证码:</label>

    <span class="bg_text small">

    <input type="text" id="captcha" name="captcha" maxLength="7"/>

    </span>

    <img src="/captcha.svl" onclick="this.src='/captcha.svl?d='+new Date()" class="code" alt="换一张" /><a href="javascript:void(0);" onclick="$('.code').attr('src','/captcha.svl?d='+new Date())" title="换一张">换一张</a>

    </li>

  • 相关阅读:
    git merge
    google platform
    http tutorial
    DS,AA tree
    Java,Hashtable
    java,Object
    Pumping lemma for regular languages
    Pumping lemma
    Context-free grammar
    Formal language
  • 原文地址:https://www.cnblogs.com/lm970585581/p/7464997.html
Copyright © 2011-2022 走看看