【2025最新】05 Spring Security 构建 RESTful Web 注册服务 - 2
背景
上一篇文章应用Spring Security 构建了 RESTful Web 注册服务,但并没有真正操作数据库,完成功能,本篇将继续上一篇文章,说明如何使用spring security,以及mybatis完成整个注册的后台功能(请参考【05 Spring Security 构建 RESTful Web 注册服务 - 1】)。
该注册为使用email 及 密码 进行注册。
修改pom文件
在 pom.xml 文件中 dependencies 中加入 mybatis 及 mysql 的 配置,如下:
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version>
</dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope>
</dependency>
创建 DAO 层访问数据库进行注册
- 在 java\com\cn\edu 下新建文件夹dao,加入注册使用的dao接口,如下:
package com.cn.edu.dao;import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserDao {public int registerByEmail(String uid, String pwd);
}
- 在 resources 目录下,新建文件application-dev.properties,并加入下面内容:
#set datasource
spring.datasource.url=jdbc:mysql://localhost:3306/edu?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=1314521888nv
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#set mybatis
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis.configuration.call-setters-on-nulls=true
- 修改 resources 目录下的文件application-dev.properties ,如下:
spring.application.name=edu
spring.profiles.active=dev
- 在 resource 目录下新建文件夹 mapper,并在 mapper 下,新建文件 UserDaoMapper.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"><!-- 命名空间需与UserDao接口全类名一致 -->
<mapper namespace="com.cn.edu.dao.UserDao"><!-- 注册功能:通过邮箱和密码插入用户记录 --><insert id="registerByEmail" parameterType="map">INSERT INTO e_user (email, password, u_status, create_time, update_time, isTeacher) VALUES (#{uid}, #{pwd}, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0 )</insert></mapper>
创建 Services 层,作为前端接口与数据库访问层中间的逻辑层
- 在 java\com\cn\edu 下新建文件夹 services,加入注册使用的 UserServices 接口,如下:
package com.cn.edu.services;public interface UserServices {public int registerByEmail(String uid, String pwd);
}
- 在文件夹 services 下,新建文件夹 imp,并在其下新建类 UserServicesImp.java 实现接口 UserServices,这里对密码做加密,如下:
package com.cn.edu.services.imp;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;import com.cn.edu.dao.UserDao;
import com.cn.edu.services.UserServices;@Service
public class UserServicesImp implements UserServices{@Autowiredprivate UserDao userDao;@Autowiredprivate PasswordEncoder passwordEncoder;@Overridepublic int registerByEmail(String uid, String pwd) {String encodePassword = passwordEncoder.encode(pwd);this.userDao.registerByEmail(uid, encodePassword);return 0;}}
修改接口层 UserController.java
在 restful 接口文件 UserController.java 中,定义并注入 services,然后调用该 services 中的注册功能,代码如下:
package com.cn.edu.controller;import java.util.concurrent.atomic.AtomicLong;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import com.cn.edu.common.ApiResponse;
import com.cn.edu.dto.Greeting;
import com.cn.edu.dto.UserDTO;
import com.cn.edu.services.UserServices;@RestController
public class UserController {@Autowiredprivate UserServices userServices;@PostMapping("/register")public ApiResponse<UserDTO> register(@RequestBody UserDTO registerUser) {this.userServices.registerByEmail(registerUser.id(), registerUser.pwd());return ApiResponse.success(registerUser); // 直接使用record的静态方法构建}}
测试
使用 Run Java 命令启动服务器,进入cmd中,执行 curl 命令:
curl -X POST http://localhost:8080/register -H "Content-Type:application/json" -d "{\"id\":\"cherry\", \"pwd\":\"1234\"}"
进入数据库查看数据,成功即可看到刚刚注册的用户信息。
