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">&nbsp;</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的意思

结果:

 Found
请求的资源现在临时从不同的URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。
只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。
新的临时性的URI应当在响应的Location域中返回。除非这是一个HEAD请求,否则响应的实体中应当包含指向新的URI的超链接及简短说明。
如果这不是一个GET或者HEAD请求,那么浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。
注意:虽然RFC 1945和RFC 2068规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器将302响应视作为303响应,并且使用GET方式访问在Location中规定的URI,
   而无视原先请求的方法。状态码303和307被添加了进来,用以明确服务器期待客户端进行何种反应
---------------------
作者:
来源: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 问题解决!

******************************************************

*不忘初心,方得始终;初心易得,始终难守。 *

******************************************************

Maven + SSM + Kaptcha 实现用户登录时验证码的获取(问题:302 Found)的更多相关文章

  1. 如果您想确保Windows 10在新用户登录时不安装内置应用程序,则必须删除所有配置的应用程序。

    原文 如果您想确保Windows 10在新用户登录时不安装内置应用程序,则必须删除所有配置的应用程序. 本文的内容 已安装与配置的应用程序 删除配置的应用程序 安装与配置的应用程序^ 在介绍如何删除所 ...

  2. .NET Core实战项目之CMS 第十六章 用户登录及验证码功能实现

    前面为了方便我们只是简单实现了基本业务功能的增删改查,但是登录功能还没有实现,而登录又是系统所必须的,得益于 ASP.NET Core的可扩展性因此我们很容易实现我们的登录功能.今天我将带着大家一起来 ...

  3. Servlet+jsp用户登录加上验证码

    最近公司有个项目被客户拿去进行漏洞扫描,发现用户登录太简单,容易被暴力破解.当然发现的问题很多,什么反射型XSS,存储型XSS,敏感信息泄露等等.但是我们今天不讲这么多,就说说如何修复暴力破解的问题. ...

  4. dede用户登录时,跳转到提示页时报404错误

    做了一个项目,本地运行,用的是Apache服务器,一切正常. 可是当我把项目放到VPS中运行时,每当输入用户名登录时,调转到"成功登录,3秒钟后转向网站主页"的提示页面时,页面的顶 ...

  5. SSM整合案例--用户登录

    实现用户登录案例,并进行非法拦截 实现当用户未登录时,无法跳转到出登录页面以外的任何页面,拦截用户仍在登陆页面:当用户登录成功即可跳转到其他页面 (1)导入依赖 <!-- https://mvn ...

  6. 最新整合maven+SSM+Tomcat 实现注册登录

    mybatis学习 http://www.mybatis.org/mybatis-3/zh/index.html Spring学习:http://blog.csdn.net/king1425/arti ...

  7. 切换或者用户登录时 出现 显示 -bash-4.2$ 问题 的解决

    集群的普通用户在登录用户或者切换用户时,出现 -bash-4.2$ 的状态: [goldwind@TR-OS-DB 9.4]#su postgres bash-4.2$ 原因:在linux下通过use ...

  8. asp.net登录时验证码的制作与验证

    1.新建一个页面,ImageCode.aspx 2.在Page_Load中添加如下代码 string tmp = RndNum(4); HttpCookie a = new HttpCookie(&q ...

  9. 用户登录时,获取用户ip地址

    使用django来获取用户访问的IP地址,如果用户是正常情况下通过request.META['REMOTE_ADDR']  可以获得用户的IP地址.但是有些网站服务器会使用ngix等代理http,或者 ...

随机推荐

  1. valgrind内存检测工具

    valgrind 那点事 ---------------------------------------内存检测工具 valgrind要使用此工具,可以使用--tool=memcheck 在Valgr ...

  2. Spring AOP中pointcut expression表达式

    Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的. Pointcut可以有下列方式来定义或者通过&am ...

  3. ·通过wifi_scan学习esp32wifi程序编写

    在ESP32的设计开发中,我们必然会需要使用到wifi或ble功能,今天就讲解下如何将WIFI功能纳入到ESP32中来. 初始化WiFi环境 首先,WiFi子系统的初始化需要由我们自己来自行,当我们写 ...

  4. Codeforces Round #514 (Div. 2) C. Sequence Transformation

    题目大意:给你一个n 从1,2,3......n这个序列中 依次进行以下操作:1 .求所有数的最大公因数,放入a序列里面 2 .任意删去一个元素 一直到序列为空 根据删除元素的不同,导致序列a的字典序 ...

  5. Internetworking

    1 Introduction 所谓的InternetWorking就是将很多网络连接起来,那么在这种连接的网络下我们该如何传送封包呢? 2 IP and Routers 1 IP Datagram H ...

  6. 代码的重构(Refactor-Extract)

    1.vs中的代码重构快捷方式:Refactor-Extract: 选中两个需要重构的部分完整代码,右击,选中Refactoe-Extract-Extract Method: 该选中的代码会自动形成一个 ...

  7. 了解Java基本数据类型的取值范围

    拿byte类型做栗子 一个字节是8位二进制数,然后最高位会用来作为符号位.正数计算机是存的原码,负数是存的补码. 也就说byte正数最大是0111 1111,转化为十进制是:127(这就是byte的上 ...

  8. 使用Lucene-Spatial实现集成地理位置的全文检索

    Lucene通过Spatial包提供了对基于地理位置的全文检索的支持,最典型的应用场景就是:“搜索中关村附近1公里内的火锅店,并按远近排序”.使用Lucene-Spatial添加对地理位置的支持,和之 ...

  9. 使用广播-BroadcastReceiver最详细解析

    女孩:BroadcastReceiver是什么呀? 男孩:Broadcast是广播的意思,在Android中应用程序之间的传输信息的机制,BroadcastReceiver是接收广播通知的组件,广播和 ...

  10. 使用js做LeetCode

    概述 无意中得知了LeetCode这个刷题网站, 深得我意. 其实作为一个程序员, 我是很看重写基础代码的, 因为这个写熟了, 以后学各种语言就不会太困难. 所以我觉得有必要把这件事记下来, 供以后开 ...