3369025109的验证码错误明明是对的码

扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
验证码总是错误,验证码错误的解决办法『图解』
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口查看: 548|回复: 9
关于登陆时的验证码显示问题
TA的每日心情奋斗 20:21签到天数: 526 天[LV.9]以坛为家II
根据自己在不同电脑登陆时发生的情况,向坛主报告一个情况。
换一电脑进入80论坛有时需要重新登陆,重新登陆时,有时还需要输入验证码。这没问题,很多论坛都是这样,但本坛的验证码图片经常无法显示(有时能显示!)搞得无法登陆。
这里建议在技术上换一种验证码显示方式,以尽可能少出现验证图片打不开的情况。谢谢!
TA的每日心情开心 01:27签到天数: 327 天[LV.8]以坛为家I
请尝试一下chrome浏览器,或者用绑定QQ登陆
此问题我们已经了解了,会向管理员反应的
TA的每日心情慵懒 13:35签到天数: 2 天[LV.1]初来乍到
我也遇到过这个问题,几天了都还没解决!
TA的每日心情奋斗 20:21签到天数: 526 天[LV.9]以坛为家II
今天登陆用的验证码能看到了。
但愿以后也一样!
TA的每日心情开心 09:51签到天数: 535 天[LV.9]以坛为家II
无意间看到了,也来说说。我是最近一个月登录时,验证码有时显示不了的,但刷新几次就可以了。
以前均可正常显示的。
TA的每日心情擦汗 21:15签到天数: 126 天[LV.7]常住居民III
验证码不显示,不排除地方宽带运营商对网址进行劫持,劫持后可能会导致验证码直接无法显示,只能通过投诉运营商通过他们来彻底解决,临时可以试试用代{过}{滤}理或者拨vpn来绕过劫持,登陆后绑定一下QQ号,下次使用QQ号登录也可以不用输入验证码。
PS:如果是论坛造成问题,将会是“大规模”爆发,不是个人、也不是一部分人,而是整个论坛要关闭维护。除管理人员,其他会员将无法登入论坛。
TA的每日心情开心 01:27签到天数: 327 天[LV.8]以坛为家I
经过与管理员反馈,无法显示验证码的情况和网络有关,现在应该没问题了
TA的每日心情难过 09:50签到天数: 261 天[LV.8]以坛为家I
验证码不显示,不排除地方宽带运营商对网址进行劫持,劫持后可能会导致验证码直接无法显示,只能通过投诉运 ...
在不同的电脑,用不同的浏览器,在不同的地方上网,结果都是一样的。
也用过代理了,不行。
头像被屏蔽
TA的每日心情擦汗 21:15签到天数: 126 天[LV.7]常住居民III
提示: 该帖被管理员或版主屏蔽
本站联系方式:QQ:
Powered by第二十二章 集成验证码——《跟我学Shiro》 - 开涛的博客(欢迎关注我的公众号[博客头像二维码]) - ITeye技术网站
博客分类:
在做用户登录功能时,很多时候都需要验证码支持,验证码的目的是为了防止机器人模拟真实用户登录而恶意访问,如暴力破解用户密码/恶意评论等。目前也有一些验证码比较简单,通过一些OCR工具就可以解析出来;另外还有一些验证码比较复杂(一般通过如扭曲、加线条/噪点等干扰)防止OCR工具识别;但是在中国就是人多,机器干不了的可以交给人来完成,所以在中国就有很多打码平台,人工识别验证码;因此即使比较复杂的如填字、算数等类型的验证码还是能识别的。所以验证码也不是绝对可靠的,目前比较可靠还是手机验证码,但是对于用户来说相对于验证码还是比较麻烦的。
对于验证码图片的生成,可以自己通过如Java提供的图像API自己去生成,也可以借助如JCaptcha这种开源Java类库生成验证码图片;JCaptcha提供了常见的如扭曲、加噪点等干扰支持。本章代码基于《第十六章 综合实例》。
一、添加JCaptcha依赖
&dependency&
&groupId&com.octo.captcha&/groupId&
&artifactId&jcaptcha&/artifactId&
&version&2.0-alpha-1&/version&
&/dependency&
&dependency&
&groupId&com.octo.captcha&/groupId&
&artifactId&jcaptcha-integration-simple-servlet&/artifactId&
&version&2.0-alpha-1&/version&
&exclusions&
&exclusion&
&artifactId&servlet-api&/artifactId&
&groupId&javax.servlet&/groupId&
&/exclusion&
&/exclusions&
&/dependency&
com.octo.captcha . jcaptcha 提供了jcaptcha 核心;而jcaptcha-integration-simple-servlet提供了与Servlet集成。
二、GMailEngine
来自(目前无法访问了),仿照JCaptcha2.0编写类似GMail验证码的样式;具体请参考com.github.zhangkaitao.shiro.chapter22.jcaptcha.GMailEngine。
三、MyManageableImageCaptchaService
提供了判断仓库中是否有相应的验证码存在。
public class MyManageableImageCaptchaService extends
DefaultManageableImageCaptchaService {
public MyManageableImageCaptchaService(
com.octo.captcha.service.captchastore.CaptchaStore captchaStore,
com.octo.captcha.engine.CaptchaEngine captchaEngine,
int minGuarantedStorageDelayInSeconds,
int maxCaptchaStoreSize,
int captchaStoreLoadBeforeGarbageCollection) {
super(captchaStore, captchaEngine, minGuarantedStorageDelayInSeconds,
maxCaptchaStoreSize, captchaStoreLoadBeforeGarbageCollection);
public boolean hasCapcha(String id, String userCaptchaResponse) {
return store.getCaptcha(id).validateResponse(userCaptchaResponse);
四、JCaptcha工具类
提供相应的API来验证当前请求输入的验证码是否正确。
public class JCaptcha {
public static final MyManageableImageCaptchaService captchaService
= new MyManageableImageCaptchaService(new FastHashMapCaptchaStore(),
new GMailEngine(), 180, 000);
public static boolean validateResponse(
HttpServletRequest request, String userCaptchaResponse) {
if (request.getSession(false) == null)
boolean validated =
String id = request.getSession().getId();
validated =
captchaService.validateResponseForID(id, userCaptchaResponse)
.booleanValue();
} catch (CaptchaServiceException e) {
e.printStackTrace();
public static boolean hasCaptcha(
HttpServletRequest request, String userCaptchaResponse) {
if (request.getSession(false) == null)
boolean validated =
String id = request.getSession().getId();
validated = captchaService.hasCapcha(id, userCaptchaResponse);
} catch (CaptchaServiceException e) {
e.printStackTrace();
validateResponse():验证当前请求输入的验证码否正确;并从CaptchaService中删除已经生成的验证码;
hasCaptcha():验证当前请求输入的验证码是否正确;但不从CaptchaService中删除已经生成的验证码(比如Ajax验证时可以使用,防止多次生成验证码);
五、JCaptchaFilter
用于生成验证码图片的过滤器。
public class JCaptchaFilter extends OncePerRequestFilter {
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
response.setDateHeader("Expires", 0L);
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 id = request.getRequestedSessionId();
BufferedImage bi = JCaptcha.captchaService.getImageChallengeForID(id);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(bi, "jpg", out);
out.flush();
} finally {
out.close();
CaptchaService使用当前会话ID当作key获取相应的验证码图片;另外需要设置响应内容不进行浏览器端缓存。
&!-- 验证码过滤器需要放到Shiro之后 因为Shiro将包装HttpSession 如果不,可能造成两次的sesison id 不一样 --&
&filter-name&JCaptchaFilter&/filter-name&
&filter-class&
com.github.zhangkaitao.shiro.chapter22.jcaptcha.JCaptchaFilter
&/filter-class&
&filter-mapping&
&filter-name&JCaptchaFilter&/filter-name&
&url-pattern&/jcaptcha.jpg&/url-pattern&
&/filter-mapping&
这样就可以在页面使用/jcaptcha.jpg地址显示验证码图片。
六、JCaptchaValidateFilter
用于验证码验证的Shiro过滤器。
public class JCaptchaValidateFilter extends AccessControlFilter {
private boolean jcaptchaEbabled =//是否开启验证码支持
private String jcaptchaParam = "jcaptchaCode";//前台提交的验证码参数名
private String failureKeyAttribute = "shiroLoginFailure"; //验证失败后存储到的属性名
public void setJcaptchaEbabled(boolean jcaptchaEbabled) {
this.jcaptchaEbabled = jcaptchaE
public void setJcaptchaParam(String jcaptchaParam) {
this.jcaptchaParam = jcaptchaP
public void setFailureKeyAttribute(String failureKeyAttribute) {
this.failureKeyAttribute = failureKeyA
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
//1、设置验证码是否开启属性,页面可以根据该属性来决定是否显示验证码
request.setAttribute("jcaptchaEbabled", jcaptchaEbabled);
HttpServletRequest httpServletRequest = WebUtils.toHttp(request);
//2、判断验证码是否禁用 或不是表单提交(允许访问)
if (jcaptchaEbabled == false || !"post".equalsIgnoreCase(httpServletRequest.getMethod())) {
//3、此时是表单提交,验证验证码是否正确
return JCaptcha.validateResponse(httpServletRequest, httpServletRequest.getParameter(jcaptchaParam));
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
//如果验证码失败了,存储失败key属性
request.setAttribute(failureKeyAttribute, "jCaptcha.error");
七、MyFormAuthenticationFilter
用于验证码验证的Shiro拦截器在用于身份认证的拦截器之前运行;但是如果验证码验证拦截器失败了,就不需要进行身份认证拦截器流程了;所以需要修改下如FormAuthenticationFilter身份认证拦截器,当验证码验证失败时不再走身份认证拦截器。
public class MyFormAuthenticationFilter extends FormAuthenticationFilter {
protected boolean onAccessDenied(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
if(request.getAttribute(getFailureKeyAttribute()) != null) {
return super.onAccessDenied(request, response, mappedValue);
即如果之前已经错了,那直接跳过即可。
八、spring-config-shiro.xml
&!-- 基于Form表单的身份验证过滤器 --&
&bean id="authcFilter"
class="com.github.zhangkaitao.shiro.chapter22.jcaptcha.MyFormAuthenticationFilter"&
&property name="usernameParam" value="username"/&
&property name="passwordParam" value="password"/&
&property name="rememberMeParam" value="rememberMe"/&
&property name="failureKeyAttribute" value="shiroLoginFailure"/&
&bean id="jCaptchaValidateFilter"
class="com.github.zhangkaitao.shiro.chapter22.jcaptcha.JCaptchaValidateFilter"&
&property name="jcaptchaEbabled" value="true"/&
&property name="jcaptchaParam" value="jcaptchaCode"/&
&property name="failureKeyAttribute" value="shiroLoginFailure"/&
&!-- Shiro的Web过滤器 --&
&bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"&
&property name="securityManager" ref="securityManager"/&
&property name="loginUrl" value="/login"/&
&property name="filters"&
&util:map&
&entry key="authc" value-ref="authcFilter"/&
&entry key="sysUser" value-ref="sysUserFilter"/&
&entry key="jCaptchaValidate" value-ref="jCaptchaValidateFilter"/&
&/util:map&
&/property&
&property name="filterChainDefinitions"&
/static/** = anon
/jcaptcha* = anon
/login = jCaptchaValidate,authc
/logout = logout
/authenticated = authc
/** = user,sysUser
&/property&
九、login.jsp登录页面
&c:if test="${jcaptchaEbabled}"&
&input type="text" name="jcaptchaCode"&
&img class="jcaptcha-btn jcaptcha-img"
src="${pageContext.request.contextPath}/jcaptcha.jpg" title="点击更换验证码"&
&a class="jcaptcha-btn" href="javascript:;"&换一张&/a&
根据jcaptchaEbabled来显示验证码图片。
输入将重定向到登录页面;输入正确的用户名/密码/验证码即可成功登录,如果输入错误的验证码,将显示验证码错误页面:
示例源代码:;可加群
探讨Spring/Shiro技术。
浏览 15303
shiro使用默认的sessionmanager没啥问题,当我自定义sessiondao,使用redis来保存session的时候,发现有如下问题:1. 页面重定向到登录页面的时候,JSESSION_ID是显示到URL参数中的,网上的,修改web.xml的session trace-mode,增加filter等方式都不好使。2. 验证码验证不成功,看session,每次验证码刷新都会新建一个session,然后验证码放入新session中,但是输入的验证码校验时,又是从最开始的那个session中去取,取出来就是null,所以比较失败。开涛有遇到么?我用的是spring mvc+shiro+redis突然想到是为什么了。。。在sessionmanager下启用了sessionIdCookie导致的。。。
&dependency&
&groupId&com.octo.captcha&/groupId&
&artifactId&jcaptcha&/artifactId&
&version&2.0-alpha-1&/version&
&/dependency&
&dependency&
&groupId&com.octo.captcha&/groupId&
&artifactId&jcaptcha-integration-simple-servlet&/artifactId&
&version&2.0-alpha-1&/version&
&exclusions&
&exclusion&
&artifactId&servlet-api&/artifactId&
&groupId&javax.servlet&/groupId&
&/exclusion&
&/exclusions&
&/dependency&&
帅哥,这个好像maven仓库没有吧,是从官网上下的jar包本地安装的? 加上6楼回复的1.0的api。使用的仓库
可以搞成输入三次错误用户名密码,再出来验证码吗?弄个变量控制一下,,当输入三次的时候,,再把验证码的DIV展示出来,,不就可以了
jinnianshilongnian
浏览: 7348750 次
浏览量:1100040
浏览量:1222189
浏览量:2280253
浏览量:127245
浏览量:551678
浏览量:141483
浏览量:1283670
浏览量:164341
shiro 1.2.4
的 org.apache.shiro ...
访问如http://192.168.1.2/lua_modul ...
学习spring3
我是你们的爹 写道文章有些问题,容易误导新手你是水军,抹黑博主 ...
田梦桦 写道体验下零配置的感觉。看看playframework ...您所在的位置: &
实例解说常见验证码的弱点与验证码识别(1)
实例解说常见验证码的弱点与验证码识别(1)
insight-labs
验证码作为一种辅助安全手段在Web安全中有着特殊的地位,验证码安全和web应用中的众多漏洞相比似乎微不足道,但是千里之堤毁于蚁穴,有些时候如果能绕过验证码,则可以把手动变为自动,对于Web安全检测有很大的帮助。
验证码作为一种辅助安全手段在Web安全中有着特殊的地位,验证码安全和web应用中的众多漏洞相比似乎微不足道,但是千里之堤毁于蚁穴,有些时候如果能绕过验证码,则可以把手动变为自动,对于Web安全检测有很大的帮助。
全自动区分计算机和人类的图灵测试(英语:Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机和人的公共全自动程序。在CAPTCHA测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。(from wikipedia)
大部分验证码的设计者都不知道为什么要用到验证码,或者对于如何检验验证码的强度没有任何概念。大多数验证码在实现的时候只是把文字印到背景稍微复杂点的图片上就完事了,程序员没有从根本上了解验证码的设计理念。
验证码的形式多种多样,先介绍最简单的纯文本验证码。
纯文本验证码
纯文本,输出具有固定格式,数量有限,例如:
&本论坛的域名是?
&今天是星期几?
&复杂点的数学运算
这种验证码并不符合验证码的定义,因为只有自动生成的问题才能用做验证码,这种文字验证码都是从题库里选择出来的,数量有限。破解方式也很简单,多刷新几次,建立题库和对应的答案,用正则从网页里抓取问题,寻找匹配的答案后破解。也有些用随机生成的数学公式,比如 随机数 [+-*/]随机运算符 随机数=?,小学生水平的程序员也可以搞定&&
这种验证码也不是一无是处,对于很多见到表单就来一发的spam bot来说,实在没必要单独为了一个网站下那么大功夫。对于铁了心要在你的网站大量灌水的人,这种验证码和没有一样。
下面讲的是验证码中的重点,图形验证码。
图形验证码
先来说一下基础:
识别图形验证码可以说是计算机科学里的一项重要课题,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域&&
简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。计算机涉及到的几何图形处理一般有 2维到n维图形处理,边界区分,面积计算,体积计算,扭曲变形校正。对于颜色则有色彩空间的计算与转换,图形上色,阴影,色差处理等等。
在破解验证码中需要用到的知识一般是 像素,线,面等基本2维图形元素的处理和色差分析。常见工具为:
&支持向量机(SVM)
&图像处理软件(Photoshop,Gimp&)
&Python Image Library
支持向量机SVM是一个机器学习领域里常用到的分类器,可以对图形进行边界区分,不过需要的背景知识太高深。
OpenCV是一个很常用的计算机图像处理和机器视觉库,一般用于人脸识别,跟踪移动物体等等,对这方面有兴趣的可以研究一下
PS,GIMP就不说了,说多了都是泪啊&&
Python Image Library是pyhon里面带的一个图形处理库,功能比较强大,是我们的首选。
SVM图像边界区分
SVM原理,把数据映射到高维空间,然后寻找能够分割的超平面
识别验证码需要充分利用图片中的信息,才能把验证码的文字和背景部分分离,一张典型的jpeg图片,每个像素都可以放在一个5维的空间里,这5个维度分别是,X,Y,R,G,B,也就是像素的坐标和颜色,在计算机图形学中,有很多种色彩空间,最常用的比如RGB,印刷用的CYMK,还有比较少见的HSL或者HSV,每种色彩空间的维度都不一样,但是可以通过公式互相转换。
RGB色彩空间构成的立方体,每个维度代表一种颜色
HSL(色相饱和度)色彩空间构成的锥体,可以参考:
https://zh.wikipedia.org/wiki/HSL%E5%92%8CHSV%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4
了解到色彩空间的原理,就可以用在该空间适用的公式来进行像素的色差判断,比如RGB空间里判断两个点的色差可以用3维空间中两坐标求距离的公式:
distance=sqrt[(r1-r2)^2+(g1-g2)^2+(b1-b2)^2]
更加直观的图片,大家感受一下:
随便把一张图片的每个像素都映射到RGB色彩空间里就能获得一个这样的立方体。
通过对像素颜色进行统计和区分,可以获得图片的颜色分布,在验证码中,一般来说使用近似颜色最多的像素都是背景,最少的一般为干扰点,干扰线和需要识别文字本身。
对于在RGB空间中不好区分颜色,可以把色彩空间转换为HSV或HSL:
内容导航&第 1 页: &第 2 页: &第 3 页:
关于&&的更多文章
为更好地应对互联网安全挑战,交流最新的安全技术与解决方案,国
虽然网购有诸多优点,越来越多的人热衷于此,但网购的安全性也逐渐凸显
创新的思科安全数据中心解决方案是唯一能够保护整个数
热播谍战电影《007:大破天幕杀机》中,英国情报处面
Fortinet(飞塔)公司作为领先的网络安全设备生产厂商
JBuilder 2006是一款强大的Java企业级开发平台,其集成了几乎所有的Java技术,涵盖了软件开发生命周期的各个过程。本书深入浅出
51CTO旗下网站

我要回帖

更多关于 验证码错误明明是对的 的文章

 

随机推荐