使用SpringBoot进行MD5加密登录注册功能的实现
程序员文章站
2022-03-10 16:04:43
一、项目架构pom.xml配置注意添加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>
数据库设计:
实体类: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