Spring MVC 下实现登录验证码功能示例
在 Web 开发中,为了防止恶意攻击和机器人攻击,我们通常会在登录页面添加验证码功能。在 Spring MVC 中,我们可以使用 Java 的 Graphics2D 类来生成验证码图片,并使用 Session 来存储验证码。本文将详细讲解如何在 Spring MVC 中实现登录验证码功能,并提供两个示例说明。
实现登录验证码功能
在 Spring MVC 中,我们可以使用 Java 的 Graphics2D 类来生成验证码图片,并使用 Session 来存储验证码。下面是一个示例代码,演示如何实现登录验证码功能:
- 在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>com.google.code.kaptcha</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
在上面的代码中,我们添加了 kaptcha 的依赖。
- 在 Spring MVC 的配置文件中添加以下代码:
<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
<property name="config">
<bean class="com.google.code.kaptcha.util.Config">
<constructor-arg>
<props>
<prop key="kaptcha.border">no</prop>
<prop key="kaptcha.textproducer.font.color">black</prop>
<prop key="kaptcha.image.width">150</prop>
<prop key="kaptcha.image.height">50</prop>
<prop key="kaptcha.textproducer.char.string">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</prop>
<prop key="kaptcha.textproducer.char.length">4</prop>
<prop key="kaptcha.textproducer.font.size">30</prop>
</props>
</constructor-arg>
</bean>
</property>
</bean>
在上面的代码中,我们创建了一个名为 captchaProducer 的 bean,并使用 DefaultKaptcha 类来生成验证码图片。
- 在 Controller 中添加以下代码:
@Controller
public class LoginController {
@Autowired
private Producer captchaProducer;
@GetMapping("/captcha.jpg")
public void captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
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();
request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
BufferedImage bi = captchaProducer.createImage(capText);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(bi, "jpg", out);
try {
out.flush();
} finally {
out.close();
}
}
@PostMapping("/login")
public String login(HttpServletRequest request, String username, String password, String captcha) {
String sessionCaptcha = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
if (!captcha.equalsIgnoreCase(sessionCaptcha)) {
return "redirect:/login?error=captcha";
}
// 验证用户名和密码
return "redirect:/home";
}
}
在上面的代码中,我们使用 @Autowired 注解将 captchaProducer 注入到 Controller 中,并在 captcha 方法中生成验证码图片,并将验证码存储到 Session 中。在 login 方法中,我们从 Session 中获取验证码,并与用户输入的验证码进行比较,如果不一致,则重定向到登录页面,并显示验证码错误信息。
示例说明
示例1:使用 Spring MVC 实现登录验证码功能
在 Spring MVC 中实现登录验证码功能非常简单。下面是一个示例代码,演示如何使用 Spring MVC 实现登录验证码功能:
- 创建一个 login.jsp 文件:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Login</title>
</head>
<body>
<form action="/login" method="post">
<label>Username:</label>
<input type="text" name="username"/><br/>
<label>Password:</label>
<input type="password" name="password"/><br/>
<label>Captcha:</label>
<input type="text" name="captcha"/>
<img src="/captcha.jpg"/><br/>
<input type="submit" value="Login"/>
</form>
<% if (request.getParameter("error") != null && request.getParameter("error").equals("captcha")) { %>
<p style="color: red;">Captcha error!</p>
<% } %>
</body>
</html>
在上面的代码中,我们创建了一个 login.jsp 文件,用于显示登录页面和验证码图片。
- 创建一个 HomeController 类:
@Controller
public class HomeController {
@GetMapping("/home")
public String home() {
return "home";
}
}
在上面的代码中,我们创建了一个 HomeController 类,用于显示主页。
示例2:使用 Spring MVC 实现登录验证码功能
在 Spring MVC 中实现登录验证码功能非常简单。下面是一个示例代码,演示如何使用 Spring MVC 实现登录验证码功能:
- 创建一个 login.jsp 文件:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Login</title>
</head>
<body>
<form action="/login" method="post">
<label>Username:</label>
<input type="text" name="username"/><br/>
<label>Password:</label>
<input type="password" name="password"/><br/>
<label>Captcha:</label>
<input type="text" name="captcha"/>
<img src="/captcha.jpg"/><br/>
<input type="submit" value="Login"/>
</form>
<% if (request.getParameter("error") != null && request.getParameter("error").equals("captcha")) { %>
<p style="color: red;">Captcha error!</p>
<% } %>
</body>
</html>
在上面的代码中,我们创建了一个 login.jsp 文件,用于显示登录页面和验证码图片。
- 创建一个 HomeController 类:
@Controller
public class HomeController {
@GetMapping("/home")
public String home() {
return "home";
}
}
在上面的代码中,我们创建了一个 HomeController 类,用于显示主页。
结论
在本文中,我们详细讲解了如何在 Spring MVC 中实现登录验证码功能,并提供了两个示例说明。无论是生成验证码图片还是存储验证码,Spring MVC 都提供了很多方便的功能来帮助我们开发 Web 项目。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springmvc下实现登录验证码功能示例 - Python技术站