让我为您详细讲解 “SpringMVC 实现用户登录实例代码”的完整攻略。
一、概述
SpringMVC 是一个基于 Spring 框架的 MVC 框架,它是用于开发 Web 应用程序的一种优秀的选择。本文将介绍如何在 SpringMVC 中实现用户登录,并提供两个示例来说明。
二、代码实现
1. 添加依赖
在 Maven 项目的 pom.xml 文件中,添加 Spring 相关依赖包。
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
2. 配置 web.xml
在 web.xml 配置文件中,添加以下配置。
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3. 编写 SpringMVC 配置文件
在 SpringMVC 配置文件中,配置视图解析器、处理器映射器等。代码示例如下:
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
4. 编写控制器类
控制器类用于处理请求和响应。在本例中,我们将使用一个简单的控制器类来处理用户登录。代码示例如下:
package com.example.demo.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(HttpServletRequest request, Model model) {
String username = request.getParameter("username");
String password = request.getParameter("password");
if ("admin".equals(username) && "123456".equals(password)) {
model.addAttribute("username", username);
return "success";
} else {
return "error";
}
}
}
5. 编写 JSP 页面
最后,编写两个 JSP 页面,一个用于用户登录,另一个用于登录成功和登录失败的提示。代码示例如下:
login.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>用户登录</title>
</head>
<body>
<form action="user/login" method="post">
用户名:<input type="text" name="username" /><br />
密码:<input type="password" name="password" /><br />
<input type="submit" value="登录" />
</form>
</body>
</html>
success.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>登录成功</title>
</head>
<body>
<h1>登录成功,欢迎您,${username}!</h1>
</body>
</html>
error.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>登录失败</title>
</head>
<body>
<h1>登录失败,用户名或密码错误!</h1>
</body>
</html>
6. 运行项目
将项目部署到 Tomcat 中并启动,访问 http://localhost:8080/user/login 即可进行用户登录。
三、示例说明
示例1:添加验证码功能
为了增加安全性,我们可以添加验证码功能,避免暴力破解。在 login.jsp 页面中添加验证码输入框,用户在输入用户名和密码后,需要输入正确的验证码才能登录。
<form action="user/login" method="post">
用户名:<input type="text" name="username" /><br />
密码:<input type="password" name="password" /><br />
验证码:<input type="text" name="verificationCode" /><br />
<img src="verificationCode.jpg" /><br />
<input type="submit" value="登录" />
</form>
在 UserController 类中,我们需要添加用于生成和检验验证码的方法。
package com.example.demo.controller;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(HttpServletRequest request, Model model) {
String username = request.getParameter("username");
String password = request.getParameter("password");
String verificationCode = request.getParameter("verificationCode");
if ("admin".equals(username) && "123456".equals(password) && checkVerificationCode(request, verificationCode)) {
model.addAttribute("username", username);
return "success";
} else {
return "error";
}
}
@RequestMapping(value = "/verificationCode.jpg", method = RequestMethod.GET)
public void createVerificationCode(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int width = 70;
int height = 25;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandomColor(200, 250));
g.fillRect(0, 0, width, height);
g.setFont(new Font("Times New Roman", Font.PLAIN, 20));
g.setColor(getRandomColor(160, 200));
for (int i = 0; i < 155; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}
String verificationCode = "";
for (int i = 0; i < 4; i++) {
String rand = String.valueOf(random.nextInt(10));
verificationCode += rand;
g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
g.drawString(rand, 13 * i + 6, 16);
}
HttpSession session = request.getSession();
session.setAttribute("verificationCode", verificationCode);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
}
private Color getRandomColor(int fc, int bc) {
Random random = new Random();
if (fc > 255) {
fc = 255;
}
if (bc > 255) {
bc = 255;
}
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
private boolean checkVerificationCode(HttpServletRequest request, String verificationCode) {
HttpSession session = request.getSession();
String code = (String) session.getAttribute("verificationCode");
if (verificationCode != null && code != null && verificationCode.equalsIgnoreCase(code)) {
session.removeAttribute("verificationCode");
return true;
}
return false;
}
}
示例2:使用 Spring Security 实现用户认证和授权
为了更好地实现用户认证和授权,我们可以使用 Spring Security 来实现。Spring Security 是一个功能强大的框架,可以快速且对 Web 应用程序进行全面的安全管理。下面是使用 Spring Security 实现用户认证和授权的示例代码。
首先,在 Maven 项目的 pom.xml 中添加以下 Spring Security 的依赖包。
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.3.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.3.4.RELEASE</version>
</dependency>
然后,在 Spring 配置文件中添加以下配置。
<security:http auto-config="true">
<security:intercept-url pattern="/" access="permitAll"/>
<security:intercept-url pattern="/user/login" access="permitAll"/>
<security:intercept-url pattern="/user/logout" access="permitAll"/>
<security:intercept-url pattern="/user/**" access="hasRole('ROLE_USER')"/>
<security:form-login login-page="/user/login" username-parameter="username" password-parameter="password"
authentication-failure-url="/user/login?error=true"/>
<security:logout logout-success-url="/" invalidate-session="true"/>
</security:http>
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="admin" password="{noop}123456" authorities="ROLE_USER"/>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
上述配置中,<security:http>
元素指定了应用程序中的所有 URL 路径的安全配置。在示例中,我们指定了 "/user/login" 和 "/user/logout" 可以被所有用户访问,"/user/**" 只能被具有 "ROLE_USER" 角色的用户访问。<security:authentication-manager>
指定了认证管理器,用于管理认证提供程序的集合。在示例中,我们使用了一个内存中的用户管理器,并指定了一个用户 "admin",密码是 "123456",拥有角色 "ROLE_USER"。其中,密码使用了 "{noop}" 前缀表示明文存储。
最后,我们需要修改 UserController 类,将原有的用户登录功能删除,并添加登录和退出功能。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class UserController {
@GetMapping("/user/login")
public String login() {
return "login";
}
@PostMapping("/user/login")
public String doLogin() {
return "redirect:/";
}
@GetMapping("/user/logout")
public String logout() {
return "redirect:/";
}
}
至此,我们已经完成了使用 Spring Security 实现用户认证和授权的示例。
四、总结
本文介绍了如何在 SpringMVC 中实现用户登录,并提供了两个示例来说明。
第一个示例添加了验证码功能,提高了安全性,防止了暴力破解。
第二个示例使用了 Spring Security 实现用户认证和授权,提供了更强的安全管理能力。
希望本文可以对大家了解 SpringMVC 的实例实现方式有所帮助,谢谢阅读!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMVC 实现用户登录实例代码 - Python技术站