Spring整合JCaptcha和对于验证的ip白名单
来源:互联网 发布:好用的鼠标推荐 知乎 编辑:程序博客网 时间:2024/05/20 02:21
1.首先是先要在pom.xml里面加上Jcaptcha的依赖,或者导入jar包(commons-collections-3.2.1.jar和jcaptcha-1.0-all.jar)
<dependency> <groupId>com.octo.captcha</groupId> <artifactId>jcaptcha-all</artifactId> <version>1.0-RC6</version> <exclusions> <exclusion> <groupId>quartz</groupId> <artifactId>quartz</artifactId> </exclusion> <exclusion> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> </exclusion> <exclusion> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> </exclusion> <exclusion> <groupId>hsqldb</groupId> <artifactId>hsqldb</artifactId> </exclusion> <exclusion> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> </exclusion> <exclusion> <groupId>concurrent</groupId> <artifactId>concurrent</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> </exclusion> <exclusion> <groupId>xerces</groupId> <artifactId>xmlParserAPIs</artifactId> </exclusion> </exclusions></dependency>
<?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"> <description>验证码服务</description> <constructor-arg index="0"><ref bean="imageEngine"/></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><!--第四个参数官网示例上没有给出,会报错,后来看了API才知道少了个参数--> </bean> <bean id="imageEngine" class="com.octo.captcha.engine.GenericCaptchaEngine"> <description>图片引擎</description> <constructor-arg index="0"> <list> <ref bean="CaptchaFactory"/> </list> </constructor-arg> </bean> <bean id="CaptchaFactory" class="com.octo.captcha.image.gimpy.GimpyFactory" > <description>验证码工厂</description> <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" > <description>文字产生器,提供了好几种实现,经过比较选用了这种</description> <constructor-arg index="0"><value>0123456789abcdefghijklmnopqrstuvwxyz</value></constructor-arg> </bean> <bean id="wordtoimage" class="com.octo.captcha.component.image.wordtoimage.ComposedWordToImage" > <description>图片生成器</description> <constructor-arg index="0"><ref bean="fontGenRandom"/></constructor-arg> <constructor-arg index="1"><ref bean="backGenUni"/></constructor-arg> <constructor-arg index="2"><ref bean="simpleWhitePaster"/></constructor-arg> </bean> <bean id="fontGenRandom" class="com.octo.captcha.component.image.fontgenerator.RandomFontGenerator" > <description>文字转换图片</description> <constructor-arg index="0"><value>20</value></constructor-arg><!--字体最小尺寸--> <constructor-arg index="1"><value>20</value></constructor-arg><!--字体最大尺寸--> </bean> <bean id="backGenUni" class="com.octo.captcha.component.image.backgroundgenerator.GradientBackgroundGenerator" > <constructor-arg index="0"><value>230</value></constructor-arg><!--背景图片宽度--> <constructor-arg index="1"><value>60</value></constructor-arg><!--背景图片高度--> <constructor-arg type="java.awt.Color" index="2"> <ref bean="colorGrey"/> </constructor-arg> <constructor-arg type="java.awt.Color" index="3"> <ref bean="colorGreen"/> </constructor-arg> </bean> <bean id="simpleWhitePaster" 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>6</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>2</value> </constructor-arg> <constructor-arg type="java.awt.Color" index="1"> <ref bean="colorWrite" /> </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="colorGrey" class="java.awt.Color" > <constructor-arg type="int" index="0"><value>200</value></constructor-arg> <constructor-arg type="int" index="1"><value>255</value></constructor-arg> <constructor-arg type="int" index="2"><value>200</value></constructor-arg> </bean> <bean id="colorGreen" class="java.awt.Color" > <constructor-arg type="int" index="0"><value>110</value></constructor-arg> <constructor-arg type="int" index="1"><value>120</value></constructor-arg> <constructor-arg type="int" index="2"><value>200</value></constructor-arg> </bean> <bean id="colorGen" class="com.octo.captcha.component.image.color.SingleColorGenerator"> <constructor-arg type="java.awt.Color" index="0"> <ref bean="colorDimGrey" /> </constructor-arg> </bean> <bean id="colorDimGrey" class="java.awt.Color"> <constructor-arg type="int" index="0"> <value>105</value> </constructor-arg> <constructor-arg type="int" index="1"> <value>105</value> </constructor-arg> <constructor-arg type="int" index="2"> <value>105</value> </constructor-arg> </bean></beans>
<import resource="classpath:applicationContext-captcha.xml"/>
4. 写一个生成图片的类
@Controller@RequestMapping("/captcha")public class JcaptchaImageCreater { private Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private ImageCaptchaService imageCaptchaService; @RequestMapping public void handleRequest(HttpServletRequest request, HttpServletResponse response) { try { ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream(); String captchaId = request.getSession().getId(); BufferedImage challenge = imageCaptchaService.getImageChallengeForID(captchaId, request.getLocale()); response.setHeader("Cache-Control", "no-store"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0L); response.setContentType("image/jpeg"); ImageIO.write(challenge, "jpeg", jpegOutputStream); byte[] captchaChallengeAsJpeg = jpegOutputStream.toByteArray(); ServletOutputStream respOs = response.getOutputStream(); respOs.write(captchaChallengeAsJpeg); respOs.flush(); respOs.close(); } catch (IOException e) { logger.error("generate captcha image error: {}", e.getMessage()); } }}5. 测试页面
<div class="span8" style="margin-left: 0px; padding-left: 15px;width:500px"><h3 style="color: #66CCCC;">您的访问太过于频繁!</h3><div class="row"style="margin-top: 10px; margin-left: 0px; padding-left: 15px;"><div id="msgBox" class="alert alert-error" style="display: none;"><button class="close" type="button" id="infoClose">×</button><p id="errorMsg"></p></div><div><label>请输入下面显示的内容:</label> <img id="captchaImg" src="captcha" onclick="this.src='captcha?d='+new Date().getTime()" style="display:block;margin:10px 0;cursor: pointer;"/><input id="index_code" name="code"type="text" /> <input id="preUrl" name="preUrl" type="hidden" value="${preUrl }"/><input id="key" name="key" type="hidden" value="${key }"/></div><div><button class="btn btn-primary"style="background: #00638A; width: 100px" type="button"id="submitBtn" onclick="validateCode()">提交</button></div></div></div><script type="text/javascript">function validateCode(){var code = $('#index_code').val();var key = $('#key').val();$.ajax({url: ctx + "/validateCode",type: "get",data: {code : code,key : key}, success:function(data){ if(data.rCode == "10000"){ if(data.data){ history.back(-1); } else { $('#errorMsg').text(data.rmsg); $('#msgBox').show(); $('#captchaImg').click() } } }});}</script>
6. 验证方法
public ResultStatus validateCode(String code, String key,HttpSession session){ Boolean isResponseCorrect = imageCaptchaService.validateResponseForID(session.getId(), code); if (isResponseCorrect) { TimesHandlerInterceptor.clearCacheRecord(key); return new ResultStatus("", "10000", true); } else { return new ResultStatus("验证码输入错误,请您重新输入", "10000", false); } }
1.首先先在web.xml配置ip白名单
<!-- 频繁访问白名单。支持 * 匹配所有和 -匹配范围。用;分隔 --> <context-param> <param-name>rule-ignore-ip</param-name> <param-value>218.80-100.*.*</param-value> </context-param>
if(rule_open != null && "true".equals(rule_open)){UtilTools.setRuleOpen(Boolean.parseBoolean(rule_open));UtilTools.setRuleIgnoreIp(event.getServletContext().getInitParameter("rule-ignore-ip"));}
private static boolean parseValidate(String ipStr, String pattern) { String[] ipStrArr = ipStr.split("\\."); String[] patternArr = pattern.split("\\."); if ( ipStrArr. length != 4 || patternArr. length != 4) { return false; } int end = ipStrArr. length; for ( int i = 0; i < end; i++) { if (patternArr[i].contains("-")) { String[] rangeArr = patternArr[i].split("-"); int from = Integer.valueOf(rangeArr[0]).intValue(); int to = Integer.valueOf(rangeArr[1]).intValue(); int value = Integer.valueOf(ipStrArr[i]).intValue(); if ( value < from || value > to) { return false; } } if ( patternArr[i].equals("*")) { continue; } if (!patternArr[i].equalsIgnoreCase(ipStrArr[i])) { return false; } } return true;}
4.验证ip
public static boolean validateIP(String ipStr, String ipPattern) { if ( ipStr == null || ipPattern == null) { return false; } String[] patternList = ipPattern.split(";"); for (String pattern : patternList) { if ( parseValidate(ipStr, pattern)) { return true; } } return false;}
2 0
- Spring整合JCaptcha和对于验证的ip白名单
- springsecurity3和JCaptcha的整合
- springsecurity3和JCaptcha的整合
- spring+ jcaptcha(spring框架下的彩色验证码)
- php限制IP和IP段的代码(白名单)
- jcaptcha验证码的使用
- jcaptcha验证码的使用
- 对于使用qq邮箱收不到邮箱验证码和流量日报的童鞋,QQ邮箱域名白名单的设置
- Jcaptcha和Kaptcha验证码使用入门
- 验证码生成组件--JCaptcha的使用
- 验证码生成组件--JCaptcha的使用
- jcaptcha和spring集成例子记录
- uginx增加IP白名单的方法
- nginx--IP白名单
- Spring与JCaptcha(验证码组件)集成
- 在Spring中使用jcaptcha实现图片验证
- spring mvc 集成 jcaptcha 生成图形验证码
- SpringBoot整合Spring Security和Mybatis验证
- 报错之后,弹窗的集中方式
- 正确使用Android性能分析工具 - TraceView
- Failed to find the required library mclmcrrt8_5.dll on java.library.path 解决方法
- 重绘控件提示
- C#中的Dictionary简介
- Spring整合JCaptcha和对于验证的ip白名单
- sparkstream接收kafka信息
- js数字舍入误差以及解决方法
- 什么才是程序员的核心竞争力?zz
- JAVA学习笔记 JDK下载、安装与测试
- Android中MotionEvent的来源和ViewRootImpl
- Flask web建站 代码段-1
- 冒泡排序法
- 设计模式 ( 十九 ) 模板方法模式Template method(类行为型)