SpringMVC 实现用户登录实例代码

让我为您详细讲解 “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技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • Hibernate Validator实现更简洁的参数校验及一个util

    那我来为您讲解一下Hibernate Validator实现更简洁的参数校验及一个util的完整攻略。 1. 简介 Hibernate Validator是一个基于Java Bean验证规范(JSR-303,JSR-349)的校验框架,可以用来校验JavaBean中的字段,包括对基本类型、日期、字符串等数据类型的支持。Hibernate Validator提…

    Java 2023年5月20日
    00
  • jsp、struts、spring、mybatis实现前端页面功能模块化拆分的方案

    要理解如何使用JSP、Struts、Spring和MyBatis实现前端页面功能模块化拆分的方案,需要遵循以下步骤: 确定需要拆分的功能模块 首先,您需要确定哪些功能模块可以拆分成独立的组件。这可以通过查看您的应用程序并确定哪些部分可以在不同的页面或功能区域中重用来实现。 例如,您的网站可以拆分为登录、注册、个人资料和搜索等功能模块。 创建独立的JSP文件和…

    Java 2023年5月20日
    00
  • SpringBoot添加SSL证书的方法

    下面是“SpringBoot添加SSL证书的方法”的完整攻略,包含以下步骤和两个示例: 步骤一:生成证书 你需要使用Java Keytool来生成密钥库文件和证书,使用以下命令生成: keytool -genkey -alias mydomain -keysize 2048 -keyalg RSA -keystore keystore.jks -validi…

    Java 2023年5月20日
    00
  • Java基础之数组详解

    Java基础之数组详解 什么是数组 数组是一种存储多个相同类型元素的数据类型。在Java中,数组的大小是在创建时确定的,并且在程序运行时不能改变。数组元素可以是任何基本类型、引用类型或其他数组类型。数组是一个对象,因此在Java中,数组变量的值是数组的引用。 创建数组 可以使用new关键字创建一个数组。语法如下: type[] arrayName = new…

    Java 2023年5月26日
    00
  • 教你用Java实现一个简单的代码生成器

    教你用Java实现一个简单的代码生成器 介绍 本篇攻略将指导读者实现一个简单的代码生成器,该生成器可以根据输入的参数生成指定模板的代码文件。该生成器基于Java语言实现,适用于Java开发者。 工具准备 为了编写该生成器,我们需要准备以下工具和环境: JDK(Java Development Kit) Maven(可以选择,不强制要求) 开发集成环境(IDE…

    Java 2023年5月18日
    00
  • 在Spring Boot中实现HTTP缓存的方法

    在Spring Boot中实现HTTP缓存的方法 在Web应用程序中,HTTP缓存是提高性能和减少网络流量的重要技术。在Spring Boot中,我们可以使用Spring框架提供的缓存机制来实现HTTP缓存。本文将介绍如何在Spring Boot中实现HTTP缓存的方法,并提供两个示例。 Spring Boot中的HTTP缓存 在Spring Boot中,我…

    Java 2023年5月15日
    00
  • Jtable和JTree的写法示例代码

    我将为您提供关于JTable和JTree的写法示例代码的攻略。 JTable的写法示例代码 基本示例 下面是一个简单的JTable示例代码,它展示了如何创建一个带有表头和数据的JTable: // 创建表头和数据 String[] columnNames = {"Name", "Age", "Gender&q…

    Java 2023年6月15日
    00
  • 全网最详细Hutool工具详解

    全网最详细Hutool工具详解 Hutool是一个Java工具库,封装了一系列的工具类,包括字符串、集合、日期时间、加密解密、文件、图片处理、网络等等常用工具,简化了Java开发中的常见操作,提高了开发效率。 字符串工具 判断字符串是否为空 String str = null; boolean empty = StrUtil.isEmpty(str);//t…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部