欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用SpringBoot进行MD5加密登录注册功能的实现

程序员文章站 2022-06-19 10:23:49
一、项目架构pom.xml配置注意添加MD5的依赖

一、项目架构
使用SpringBoot进行MD5加密登录注册功能的实现
pom.xml配置
注意添加MD5的依赖

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springboot_test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_test</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>

        <dependency>
            <groupId>com.jna</groupId>
            <artifactId>jna-sdk</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.60</version>
            <scope>test</scope>
        </dependency>


        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0</version>
        </dependency>

        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>me.zzp</groupId>
            <artifactId>district</artifactId>
            <version>1.2.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.12</version>
        </dependency>
        <!--MD5加密-->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.14</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

数据库设计:
使用SpringBoot进行MD5加密登录注册功能的实现

实体类:Admin.java

package com.example.springboot_test.entity;

import lombok.Data;

@Data
public class Admin {
    private Integer id;

    private String userName;

    private String pwd;

}

MD5工具类:
注:这里采用的是工具类,也可以使用spring boot自带的MD5加密

package com.example.springboot_test.utils;

import java.security.MessageDigest;

public class MD5Utils {
    public static String string2MD5(String inStr) {
        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance("MD5");
        } catch (Exception e) {
            System.out.println(e.toString());
            e.printStackTrace();
            return "";
        }
        char[] charArray = inStr.toCharArray();
        byte[] byteArray = new byte[charArray.length];

        for (int i = 0; i < charArray.length; i++) {
            byteArray[i] = (byte) charArray[i];
        }
        byte[] md5Bytes = md5.digest(byteArray);
        StringBuffer hexValue = new StringBuffer();
        for (int i = 0; i < md5Bytes.length; i++) {
            int val = ((int) md5Bytes[i]) & 0xff;
            if (val < 16){
                hexValue.append("0");
            }
            hexValue.append(Integer.toHexString(val));
        }
        return hexValue.toString();

    }

    /**
     * 加密解密算法 执行一次加密,两次解密
     */
    public static String convertMD5(String inStr) {

        char[] a = inStr.toCharArray();
        for (int i = 0; i < a.length; i++) {
            a[i] = (char) (a[i] ^ 't');
        }
        String s = new String(a);
        return s;

    }

    // 测试主函数
    public static void main(String args[]) {
        String s = "Kodak";
        System.out.println("原始:" + s);
        System.out.println("MD5后:" + string2MD5(s));
        System.out.println("加密的:" + convertMD5(s));
        System.out.println("解密的:" + convertMD5(convertMD5(s)));
    }

}

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">
<mapper namespace="com.example.springboot_test.mapper.AdminMapper">
    <resultMap id="BaseResultMap" type="com.example.springboot_test.entity.Admin">
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="user_name" jdbcType="VARCHAR" property="userName" />
        <result column="pwd" property="pwd"></result>
    </resultMap>
<!--登录-->
    <select id="login" resultType="com.example.springboot_test.entity.Admin" resultMap="BaseResultMap">
        select id,user_name,pwd
        from admin
        where id=#{id} and user_name=#{userName}and pwd=#{pwd}
    </select>
    <!--注册--->
    <insert id="register" parameterType="com.example.springboot_test.entity.Admin">
        insert into admin
        (id,user_name,pwd)
        values
        (#{id},#{userName},#{pwd})
    </insert>
    <!---根据id找数据库里的内容进行注册判断-->
    <select id="getAdminById" resultMap="BaseResultMap">
        select id,user_name,pwd from admin
        where id=#{id}
    </select>
      <!---根据userName找数据库里的内容进行登录判断-->
    <select id="getAdminByUserName" resultMap="BaseResultMap">
        select * from
        admin
        where user_name=#{userName}
    </select>
</mapper>

AdminMapper

package com.example.springboot_test.mapper;

import com.example.springboot_test.entity.Admin;
import org.springframework.stereotype.Repository;

@Repository
public interface AdminMapper {
    //登录
    Admin login(Admin admin);
   //注册
    int register(Admin admin);

    Admin getAdminById(Integer id);

   Admin getAdminByUserName(String userName);
}

业务层接口:AdminSevice

package com.example.springboot_test.mapper;

import com.example.springboot_test.entity.Admin;
import org.springframework.stereotype.Repository;

@Repository
public interface AdminMapper {
    //登录
    Admin login(Admin admin);
   //注册
    int register(Admin admin);

    Admin getAdminById(Integer id);

   Admin getAdminByUserName(String userName);
}

业务层接口实现类:AdminServiceImpl
注意这里的对于注册和登录进行的判断
1.已经注册了怎么办
2.密码或登录名不正确怎么办

package com.example.springboot_test.service.impl;

import com.example.springboot_test.entity.Admin;
import com.example.springboot_test.mapper.AdminMapper;
import com.example.springboot_test.service.AdminService;
import com.example.springboot_test.utils.MD5Utils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class AdminServiceImpl implements AdminService {
    @Resource
    AdminMapper adminMapper;


    @Override
    public String login(Admin admin) {
        //1、查询登录账号的登录信息(查到/未查到)
        String userName=admin.getUserName();
        Admin result = adminMapper.getAdminByUserName(userName);
        if (result == null) {
            return "登录失败";
        } else {
            //2、判断登录密码和库里面密码是否一致
            String pwd1 = MD5Utils.string2MD5(admin.getPwd());
            if (pwd1.equals(result.getPwd())) {
                return "登录成功";
            } else {
                return "登录失败";
            }
        }

    }

    @Override
    public String register(Admin admin) {
        //1、判断用户账号是否已注册(已注册/未注册)
        Integer id = admin.getId();
        // String pwd=admin.getPwd();
//        admin.setUserName(userName);
        //admin.setPwd(pwd);
        Admin result = adminMapper.getAdminById(id);
        if (result != null) {
            return "账号已注册";
        } else {
            String pwd = MD5Utils.string2MD5(admin.getPwd());
            admin.setPwd(pwd);
            //2、未注册,则密码加密存库
            adminMapper.register(admin);
            return "注册成功";


        }
    }
}

控制层:AdminController

package com.example.springboot_test.controller;

import com.example.springboot_test.entity.Admin;
import com.example.springboot_test.service.AdminService;
import com.example.springboot_test.utils.MD5Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@ResponseBody
public class AdminController {
    @Autowired
    AdminService adminService;


    /**
     * 注册
     *
     * @param admin
     * @return
     */
    @GetMapping("/register")
    public String register(@Validated Admin admin) {
//        String pwd = MD5Utils.string2MD5(admin.getPwd());
//        admin.setPwd(pwd);

        return adminService.register(admin);

    }

    /**
     * 登录
     */
    @GetMapping("/login")
    public String login(Admin admin) {

//        String pwd1 = MD5Utils.convertMD5(MD5Utils.convertMD5(admin.getPwd()));
//        admin.setPwd(pwd1);

            return adminService.login(admin);


    }
}

本文地址:https://blog.csdn.net/sfz1234567890/article/details/112565879