Maven + SSM + Kaptcha 实现用户登录时验证码的…
2018-12-11 09:05:19来源:博客园 阅读 ()
pom.xml(对Kaptcha.jar的引用)
<!-- 验证码 jar kaptcha--> <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> </dependency> </dependencies>
spring-mvc.xml(Kaptche的相关设置)
<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha"> <property name="config"> <bean class="com.google.code.kaptcha.util.Config"> <constructor-arg> <props> <!-- 是否有边框 可选yes 或者 no --> <prop key="kaptcha.border">yes</prop> <!-- 边框颜色 --> <prop key="kaptcha.border.color">105,179,90</prop> <!-- 验证码文本字符颜色 --> <prop key="kaptcha.textproducer.font.color">blue</prop> <!-- 验证码文本字符大小 --> <prop key="kaptcha.textproducer.font.size">45</prop> <!-- 验证码图片的宽度 默认200 --> <prop key="kaptcha.image.width">125</prop> <!-- 验证码图片的高度 默认50 --> <prop key="kaptcha.image.height">45</prop> <!-- 验证码文本字符长度 默认为5 --> <prop key="kaptcha.textproducer.char.length">4</prop> <!-- 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) --> <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop> </props> </constructor-arg> </bean> </property> </bean>
BaseController.java(验证码获取Controller)
@Controller public class BaseController { @Autowired private Producer captchaProducer = null; @RequestMapping(value = "verifyImage") public void getVerifyImage(HttpServletRequest request,HttpServletResponse response) throws IOException { HttpSession session = request.getSession(); 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(); session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText); System.out.println("生成验证码文本===="+capText); //利用生成的字符串构建图片 BufferedImage bi = captchaProducer.createImage(capText); ServletOutputStream out = response.getOutputStream(); ImageIO.write(bi, "jpg", out); try { out.flush(); } finally { out.close(); } }
login.jsp(用户登录页面)
<tr> <td align="right" class="wenzi">验证码:</td> <td width="59">
<input id="rand" tabindex="3" name="rand" maxlength='4' type="text" value="" class="shurukuang1">
</td> <td width="56">
<img name="randImage" id="randImage" src="" width="64" height="20" border="1" align="top" onclick="javascript:void(0);">
</td> <td width="88"> </td> </tr>
前台js(初始化验证码图片)
<script type="text/javascript"> $(function() { $("#randImage").attr("src","${prc }/verifyImage.do?"+Math.random()); }); </script>
当写完前台代码,访问login.jsp时验证码获取失败(Status Code:302 Found)
网上搜索Java 302 Found的资料及Navigated to的意思
结果:
302 Found 请求的资源现在临时从不同的URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。
只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。 新的临时性的URI应当在响应的Location域中返回。除非这是一个HEAD请求,否则响应的实体中应当包含指向新的URI的超链接及简短说明。 如果这不是一个GET或者HEAD请求,那么浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。 注意:虽然RFC 1945和RFC 2068规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器将302响应视作为303响应,并且使用GET方式访问在Location中规定的URI,
而无视原先请求的方法。状态码303和307被添加了进来,用以明确服务器期待客户端进行何种反应 --------------------- 作者:5207 来源:CSDN 原文:https://blog.csdn.net/5207/article/details/52668300 版权声明:本文为博主原创文章,转载请附上博文链接!
Navigated to是什么意思? Chrome console shows Navigate to url(地址) 告知地址跳转的问题,如果取消勾选 Preserverlog,这个消息一般不出现~ 原文:https://zhidao.baidu.com/question/2012131565043479068.html
作为小白,查询到这些也是似懂非懂,无从下手修改程序.只能继续查询资料,功夫不负有心人.突然看到一篇文章给了我很大的启发:
Shiro眼皮下玩ajax,玩出302 Found
解决方式:配置忽略项。在spring管理Shiro安全框架的配置文件中配置获取验证码的方法,让它可以匿名访问即可,就是用户没有登录,也可以发送请求到后台执行方法。 <!-- shiro连接约束配置 --> <property name="filterChainDefinitions"> <value> <!-- 对静态资源设置允许匿名访问 --> /images/** = anon /js/** = anon /css/** = anon <!-- 可匿名访问路径,例如:短信验证码、登录连接、退出连接等 --> /auth/login = anon /user/sendCode = anon <!-- 剩余其他路径,必须认证通过才可以访问 --> /** = authc </value> </property>
来源:博客园
原文:https://blog.csdn.net/5207/article/details/52668300
虽然不懂shiro是什么技术,但是文章中的一些字眼提醒了我,获取验证码的请求可能被程序拦截并被重定向到/tologin.do
这是突然想起自己已经在程序中设置LoginInterceptors(拦截器),就想请求可能被这个拦截器拦截.
解决办法:
spring-mvc.xml(LoginInterceptors对verifyImage.do放行
<!-- 注册登录拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/*/*.do"/> <mvc:mapping path="/*.do"/> <mvc:exclude-mapping path="/login.do"/> <mvc:exclude-mapping path="/tologin.do"/> <!-- 对验证码获取请求放行 --> <mvc:exclude-mapping path="/verifyImage.do"/> <bean class="com.ahiki.epay.interceptors.LoginInterceptors" /> </mvc:interceptor> </mvc:interceptors>
修改完成后访问登录页面,验证码获取成功!
到此,302 Found 问题解决!
******************************************************
*不忘初心,方得始终;初心易得,始终难守。 *
******************************************************
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- eclipse下创建Maven项目(包含webapp目录结构) 2020-06-09
- Maven安装与配置 2020-06-09
- IDEA下Maven的pom文件导入依赖出现Auto build completed wit 2020-06-07
- 解决IDEA Maven下载依赖包速度慢问题 2020-06-05
- Java高级实战Maven+JSP+SSM+Mysql实现的音乐网站,70%人不会 2020-06-04
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash