• 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>

  • 相关阅读:
    jython resources
    Installing a Library of Jython ScriptsPart of the WebSphere Application Server v7.x Administration Series Series
    jython好资料
    ulipad install on 64bit win7 has issue
    an oracle article in high level to descibe how to archtichre operator JAVA relevet project
    table的宽度,单元格内换行问题
    Linux常用命令大全
    dedecms系统后台登陆提示用户名密码不存在
    登录织梦后台提示用户名不存在的解决方法介绍
    Shell常用命令整理
  • 原文地址:https://www.cnblogs.com/lm970585581/p/7464997.html
Copyright © 2020-2023  润新知