springMVC引入kaptcha

引入依賴java

<dependency>
    <groupId>com.github.axet</groupId>
        <artifactId>kaptcha</artifactId>
    <version>0.0.9</version>
</dependency>

Spring-mvc.xml添加git

<!-- Kaptcha驗證碼生成器 -->
    <bean name="producer" class="com.google.code.kaptcha.impl.DefaultKaptcha" scope="singleton">
        <property name="config">
            <bean class="com.google.code.kaptcha.util.Config">
                <constructor-arg>
                    <props>
                        <prop key="kaptcha.border">no</prop>
                        <prop key="kaptcha.textproducer.font.color">black</prop>
                        <prop key="kaptcha.textproducer.char.space">5</prop>
                        <prop key="kaptcha.textproducer.char.length">5</prop>
                        <prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.ShadowGimpy</prop>
                        <!-- kaptcha.border  是否有邊框  默認爲true  咱們能夠本身設置yes,no  
                        kaptcha.border.color   邊框顏色   默認爲Color.BLACK  
                        kaptcha.border.thickness  邊框粗細度  默認爲1  
                        kaptcha.producer.impl   驗證碼生成器  默認爲DefaultKaptcha  
                        kaptcha.textproducer.impl   驗證碼文本生成器  默認爲DefaultTextCreator  
                        kaptcha.textproducer.char.string   驗證碼文本字符內容範圍  默認爲abcde2345678gfynmnpwx  
                        kaptcha.textproducer.char.length   驗證碼文本字符長度  默認爲5  
                        kaptcha.textproducer.font.names    驗證碼文本字體樣式  默認爲new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)  
                        kaptcha.textproducer.font.size   驗證碼文本字符大小  默認爲40  
                        kaptcha.textproducer.font.color  驗證碼文本字符顏色  默認爲Color.BLACK  
                        kaptcha.textproducer.char.space  驗證碼文本字符間距  默認爲2  
                        kaptcha.noise.impl    驗證碼噪點生成對象  默認爲DefaultNoise  
                        kaptcha.noise.color   驗證碼噪點顏色   默認爲Color.BLACK  
                        kaptcha.obscurificator.impl   驗證碼樣式引擎  默認爲WaterRipple  
                        kaptcha.word.impl   驗證碼文本字符渲染   默認爲DefaultWordRenderer  
                        kaptcha.background.impl   驗證碼背景生成器   默認爲DefaultBackground  
                        kaptcha.background.clear.from   驗證碼背景顏色漸進   默認爲Color.LIGHT_GRAY  
                        kaptcha.background.clear.to   驗證碼背景顏色漸進   默認爲Color.WHITE  
                        kaptcha.image.width   驗證碼圖片寬度  默認爲200  
                        kaptcha.image.height  驗證碼圖片高度  默認爲50    -->
                    </props>
                </constructor-arg>
            </bean>
        </property>
    </bean>

生成驗證碼github

@RequestMapping(value = "/captchaImg", method = RequestMethod.GET)
public void image(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();
    //生成圖片驗證碼
    BufferedImage image = captchaProducer.createImage(capText);
    //保存到shiro session
    SecurityUtils.getSubject().getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);

    ServletOutputStream out = response.getOutputStream();
    ImageIO.write(image, "jpg", out);
    try {
        out.flush();
    } finally {
        out.close();
    }
}

驗證驗證碼web

@RequestMapping(value = "/captchaValid", method = RequestMethod.POST)
@ResponseBody
public Message captchaValid(String captcha) throws Exception {
    String kaptcha = SecurityUtils.getSubject().getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY).toString();
    SecurityUtils.getSubject().getSession().removeAttribute(Constants.KAPTCHA_SESSION_KEY);
    if (captcha.equalsIgnoreCase(kaptcha)) {
        return Message.success("驗證成功");
    }
    return Message.error("驗證碼不正確");
}

合併後爲spring

import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;

/**
 * Controller - 驗證碼
 *
 * @author liaoyx
 * @version 1.0
 */
@Controller("mgmtCaptchaController")
@RequestMapping("/mgmt/captcha")
public class CaptchaController extends BaseController {

    private Producer captchaProducer = null;

    @Autowired
    public void setCaptchaProducer(Producer captchaProducer) {
        this.captchaProducer = captchaProducer;
    }

    @RequestMapping(value = "/captchaImg", method = RequestMethod.GET)
    public void image(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();
        //生成圖片驗證碼
        BufferedImage image = captchaProducer.createImage(capText);
        //保存到shiro session
        SecurityUtils.getSubject().getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);

        ServletOutputStream out = response.getOutputStream();
        ImageIO.write(image, "jpg", out);
        try {
            out.flush();
        } finally {
            out.close();
        }
    }

    @RequestMapping(value = "/captchaValid", method = RequestMethod.POST)
    @ResponseBody
    public Message captchaValid(String captcha) throws Exception {
        String kaptcha = SecurityUtils.getSubject().getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY).toString();
        SecurityUtils.getSubject().getSession().removeAttribute(Constants.KAPTCHA_SESSION_KEY);
        if (captcha.equalsIgnoreCase(kaptcha)) {
            return R.success("驗證成功");
        }
        return R.error("驗證碼不正確");
    }

}

參數詳解
參數詳解apache

相關文章
相關標籤/搜索