MD5的实际应用+对用户的密码进行加密操作+存入数据库+登录验证密码是否一致

前言:本文将用到Mybatics,前端AJAX技术,SpringBoot

前端控制登录检测,注册用户名重名【前后端一起验证】

1.创建一个项目【maven已经配置完毕–>请将setting.xml的配置改为阿里云的仓库】

在这里插入图片描述

2.pom.xml配置文件代码

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>smipleMd5</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>smipleMd5</name>
    <description>smipleMd5</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.7.RELEASE</version>
                <configuration>
                    <mainClass>com.example.smiplemd5.SmipleMd5Application</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

3.单击M图标,导入依赖包

在这里插入图片描述

4.建立user表代码如下

在这里插入图片描述

/*
 Navicat Premium Data Transfer

 Source Server         : localhost_3306
 Source Server Type    : MySQL
 Source Server Version : 80026
 Source Host           : localhost:3306
 Source Schema         : md5

 Target Server Type    : MySQL
 Target Server Version : 80026
 File Encoding         : 65001

 Date: 04/07/2022 21:43:02
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `uid` int(0) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `password` char(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `salt` char(36) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`uid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;


5.选择数据源mysql

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
**

6.生成实体类

**
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7.编写数据库配置文件application.properties

# 应用名称
spring.application.name=smipleMd5
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源名称
spring.datasource.name=defaultDataSource
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?serverTimezone=UTC
# 数据库用户名&密码:
spring.datasource.username=root
spring.datasource.password=你的密码
#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mappers/*xml
#指定Mybatis的实体目录【填写你的实体包目录】
mybatis.type-aliases-package=com.example.smiplemd5.entity;
# 应用服务 WEB 访问端口
server.port=8080

8.创建工具类

package com.example.smiplemd5.util;

import java.io.Serializable;

public class JsonResult<E> implements Serializable {
    private Integer state;//响应状态码
    private String info;//描述信息
    private E data;//数据返回不确定,我们使用泛型
//构造方法

    public JsonResult() {
        super();

    }
    public JsonResult(int ok) {
       super();
       this.setState(ok);
    }

    public JsonResult(Throwable a){
        this.info = a.getMessage();
    }

    public JsonResult(Integer state, E data) {
        this.state = state;
        this.data = data;
    }

    public Integer getState() {
        return state;
    }

    public void setState(Integer state) {
        this.state = state;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public E getData() {
        return data;
    }

    public void setData(E data) {
        this.data = data;
    }
}

9.mapper包下创建UserMapper接口

在这里插入图片描述

package com.example.smiplemd5.mapper;

import com.example.smiplemd5.entity.User;

//用户登录模块持久层接口
public interface UserMapper {
    //注册用户数据,return受影响的行
    Integer insert(User user);
    //登录时查询是否有该用户数据
    User findByUsername(String username);
}

10.Service包下创建UserService接口和UserServiceImpl实现接口类

在这里插入图片描述

UserService接口源码

package com.example.smiplemd5.service;

import com.example.smiplemd5.entity.User;

public interface UserService {
    void insert(User user) throws Exception;
    User login(String username, String password);
}

UserServiceImpl类源码
package com.example.smiplemd5.service;

import com.example.smiplemd5.entity.User;
import com.example.smiplemd5.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import java.util.UUID;

//Service注解:将当前类的对象交给Spring来管理,自动创建对象的维护
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;//这里报红不影响

    @Override
    public void insert(User user) throws Exception {
        String userName = user.getUsername();
        System.err.println(userName);
        //检测用户名是否被占用
        User row=userMapper.findByUsername(userName);
        System.err.println(row);
        if (row!=null){
           throw new Exception("用户名已被注册");
        }else{
            /*MD5加密获取一个盐值,
         salt+password+salt
        放在for循环里面执行三次*/
            //用户输入的密码
            String inputPassword=user.getPassword();
            //生成的salt,转字符串,转大写
            String salt= UUID.randomUUID().toString().toUpperCase();
            //调用md5加密方法
            String changePassword= MD5(inputPassword,salt);
            //加密后的密码放到password字段
            user.setPassword(changePassword);
            //随机生成的盐值放入salt字段
            user.setSalt(salt);
            System.err.println(salt);
            Integer map=userMapper.insert(user);
            if(map!=1){
                System.err.println("插入异常");
            }

        }

    }

    @Override
    public User login(String username, String password) {
        //根据用户名查询用户数据是否存在,不存在抛出异常
        User result = userMapper.findByUsername(username);
        if(result==null){
            System.err.println("用户数据不存在");
        }
        //检测用户密码是否匹配
        //获取数据库中加密之后的密码,用户传过来的密码(加密)进行比较
        String inputPassword = result.getPassword();
        //1.先获取盐值在result对象中
        String salt=result.getSalt();
        //2.前端的用户密码用md5算法规则进行加密
        String changePassword= MD5(password,salt);
        //3.比较
        if(!changePassword.equals(inputPassword )){
            System.err.println("密码错误");
        }

        User user=new User();
        user.setUid(result.getUid());
        user.setUsername(result.getUsername());
        return user;
    }

    /*MD5加密方法*/
    private String MD5(String inputPassword,String salt){
       for (int i=0;i<3;i++){
           inputPassword= DigestUtils.md5DigestAsHex((salt+inputPassword+salt).getBytes());
       }
       return inputPassword;
    }
}


11.在resource下创建mapper文件夹编写Mybatics的SQL语句的xml文件

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!--命名空间必须是java目录下的mapper包下的UserMapper接口-->
<mapper namespace="com.example.smiplemd5.mapper.UserMapper">

    <resultMap type="com.example.smiplemd5.entity.User" id="usermap">
        <id column="uid" property="uid"/>
        <result column="username" property="username"/>
        <result column="password" property="password"/>
        <result column="salt" property="salt"/>
    </resultMap>
<!--useGeneratedKeys="true" keyProperty="uid"自动增长字段uid  id必须和接口的名称一致-->
    <insert id="insert" useGeneratedKeys="true" keyProperty="uid">
        insert into user(username,password,salt)
        values(#{username},#{password},#{salt})
    </insert>

    <select id="findByUsername" resultMap="usermap">
        select * from user where username=#{username}
    </select>
</mapper>

12.编写controller包下的UserController类

在这里插入图片描述

package com.example.smiplemd5.controller;

import com.example.smiplemd5.entity.User;
import com.example.smiplemd5.service.UserService;
import com.example.smiplemd5.util.JsonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;

//@RestController===》@Controller+@RequestBody
@RestController
@RequestMapping("users")
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping("insert")
    public JsonResult<Void> insert(User user){
        JsonResult<Void> result = new JsonResult<>();
        try {
            userService.insert(user);
            result.setState(200);
            result.setInfo("用户注册成功");
        } catch (Exception e) {
            result.setState(4000);
            result.setInfo("用户名被占用");
        }
        return result;
    }

    @RequestMapping("login")
    public JsonResult<User> login(String username, String password){
        User data= userService.login(username,password);
        return new JsonResult<User>(200,data);
    }
}

13.前端文件编写

在这里插入图片描述
放在static目录下
static文件打包放在16节

14.测试–>注册http://localhost:8080/registeruser.html

在这里插入图片描述
查看数据库

在这里插入图片描述

尝试再次以admin注册账号

在这里插入图片描述

15.测试–>登录http://localhost:8080/loginuser.html

在这里插入图片描述
在这里插入图片描述

16.项目源码

链接:https://pan.baidu.com/s/1euYTuLcHW9c5LFenK5PPSQ?pwd=1111 
提取码:1111
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值