Spring与jcaptcha集成
来源:互联网 发布:苹果mac电脑办公软件 编辑:程序博客网 时间:2024/05/16 08:18
需求:
验证码非常常见,那么在spring中使用jcaptcha进行认证那么需要集成
实现:
mvn:
<!-- code check captcha start --><dependency> <groupId>com.octo.captcha</groupId> <artifactId>jcaptcha</artifactId> <version>1.0</version></dependency><!-- code check captcha end -->
一般仓库中没有对应的jar,比如imaging-01012005.jar那么需要手动添加仓库
<repository> <id>atlassian</id> <name>atlassian</name> <url>http://maven.jahia.org/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots></repository>
基于注解mvc,那么图片的请求路径为Controller,流程为请求path:/anon/getcode产生验证码
这样spring的配置信息为:
<context:component-scan base-package="com.someabcd.csr" /><!-- check code start --><bean id="captchaService" class="com.octo.captcha.service.multitype.GenericManageableCaptchaService"> <description>验证码服务</description> <constructor-arg index="0"> <ref bean="com.someabcd.csr.web.crsCaptchaEngine" /> </constructor-arg> <constructor-arg index="1"> <value>300</value> </constructor-arg><!--超时时间 秒 --> <constructor-arg index="2"> <value>20000</value> </constructor-arg><!--最大并发数 --> <constructor-arg index="3"> <value>20000</value> </constructor-arg></bean>
com.someabcd.csr.web.crsCaptchaEngine类为:
@Component("com.someabcd.csr.web.crsCaptchaEngine")public class CSRCaptchaEngine extends ListImageCaptchaEngine { @Override protected void buildInitialFactories() { int minWordLength = 4; int maxWordLength = 5; int fontSize = 50; int imageWidth = 152; int imageHeight = 100; WordGenerator wordGenerator = new RandomWordGenerator( "0123456789abcdefghijklmnopqrstuvwxyz"); TextPaster randomPaster = new DecoratedRandomTextPaster(minWordLength, maxWordLength, new RandomListColorGenerator(new Color[] { new Color(23, 170, 27), new Color(220, 34, 11), new Color(23, 67, 172) }), new TextDecorator[] {}); BackgroundGenerator background = new UniColorBackgroundGenerator( imageWidth, imageHeight, Color.white); FontGenerator font = new RandomFontGenerator(fontSize, fontSize, new Font[] { new Font("nyala", Font.BOLD, fontSize), new Font("Bell MT", Font.PLAIN, fontSize), new Font("Credit valley", Font.BOLD, fontSize) }); ImageDeformation postDef = new ImageDeformationByFilters( new ImageFilter[] {}); ImageDeformation backDef = new ImageDeformationByFilters( new ImageFilter[] {}); ImageDeformation textDef = new ImageDeformationByFilters( new ImageFilter[] {}); WordToImage word2image = new DeformedComposedWordToImage(font, background, randomPaster, backDef, textDef, postDef); addFactory(new GimpyFactory(wordGenerator, word2image)); }}
处理请求的Controller:
@Controller@RequestMapping("anon")public class AnonController { @Autowired private GenericManageableCaptchaService captchaService; @RequestMapping(value = "/getcode", method = RequestMethod.GET) public void getCode(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { byte[] captchaChallengeAsJpeg = null; // 输出jpg的字节流 ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream(); try { String captchaId = httpServletRequest.getSession().getId(); BufferedImage challenge = (BufferedImage) captchaService .getChallengeForID(captchaId, httpServletRequest.getLocale()); // a jpeg encoder JPEGImageEncoder jpegEncoder = JPEGCodec .createJPEGEncoder(jpegOutputStream); jpegEncoder.encode(challenge); captchaChallengeAsJpeg = jpegOutputStream.toByteArray(); // flush it in the response httpServletResponse.setHeader("Cache-Control", "no-store"); httpServletResponse.setHeader("Pragma", "no-cache"); httpServletResponse.setDateHeader("Expires", 0); httpServletResponse.setContentType("image/jpeg"); ServletOutputStream responseOutputStream = httpServletResponse .getOutputStream(); responseOutputStream.write(captchaChallengeAsJpeg); responseOutputStream.flush(); responseOutputStream.close(); } catch (Exception e) { try { httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND); } catch (IOException e1) { e1.printStackTrace(); } return; } }}
验证码的显示:
<tr> <td colspan="2" align="center"> <img src="${basePath}anon/getcode" onclick="this.src='${basePath}anon/getcode?d='+new Date()*1" width="160" height="30"/> </td></tr><tr> <td height="40" align="right"> <strong> 验证码: </strong> </td> <td> <input name="code" type="text" id="code" vld="{required:true}" class="input"/> </td></tr>
验证码验证代码块:
Boolean isCorrect = Boolean.FALSE;String captchaId = request.getSession().getId();String code = request.getParameter("code");try { isCorrect = captchaService.validateResponseForID(captchaId, code); if (!isCorrect) { log.info("check code error!"); return "usr/tologin"; }} catch (Exception e) { log.error(e.getMessage());}
备注:
可以把CaptchaEngine也配置的配置文件中,好处是可以随时修改,缺点是20%的事情缺耗费了80%时间,且这20%不重要
转自http://www.tuicool.com/articles/rMre63
0 0
- Spring与jcaptcha集成
- Spring与JCaptcha(验证码组件)集成
- jcaptcha和spring集成例子记录
- spring mvc 集成 jcaptcha 生成图形验证码
- jcaptcha
- Tapestry3 与 Spring 集成
- struts2.与spring集成
- CXF与spring集成
- CXF与spring集成
- CXF与spring集成
- struts2.与spring集成
- CXF与spring集成
- CXF与spring集成
- Spring 与Aspectj集成
- flex与spring集成
- Struts2与Spring集成
- Spring与Struts集成
- Spring与DWR集成
- 淘宝Tengine web服务器介绍
- 防止过拟合以及解决过拟合
- python中range和xrange的区别
- myPthread_mutext.c
- Java HashMap的工作原理
- Spring与jcaptcha集成
- Oracle学习笔记(6)------------多表查询
- 【转】脏读、不可重复读、幻读
- java高分局之jstack命令使用
- DatePicker and TimePicker
- Java中的泛型
- BaseDao接口设计
- 布尔检索
- 堆栈的顺序存储结构的简单实现