注册
- 请求参数有两个:username和password,分别表示用户名和密码。请求参数是通过URL传递的,如`/login?username=admin&password=123456
- 响应数据: code(相应码,0表示成功,1表示失败)、message(响应消息)、data(响应数据)。
1 2 3 4 5
| { "code": 0, "message": "登录成功", "data": null }
|
定义一个有如上三个成员变量的result类,用于封装响应数据,spring自动将其转换为json格式返回给前端。
Result.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @AllArgsConstructor @NoArgsConstructor public class Result<T> { private int code; private String message; private T data;
public static<E> Result<E> success(E data) { return new Result<>(0, "success", data); }
public static<E> Result<E> success() { return new Result<>(0, "操作成功", null); }
public static<E> Result<E> fail(int code, String message) { return new Result<>(1, message, null); } }
|
User.java
1 2 3 4 5 6 7 8 9 10 11 12 13
| @Data @AllArgsConstructor @NoArgsConstructor public class User { private int id; private String username; private String password; private String nickname; private String email; private String avatar; public Timestamp createTime; public Timestamp updateTime; }
|
UserMapper.java
1 2 3 4 5 6 7 8 9
| @Mapper public interface UserMapper {
@Select("select * from user where username = #{username}") User findByUsername(String username);
@Insert("insert into user (username, password) values (#{username}, #{password})") void add(String username, String encode); }
|
UserService.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| @Service public class UserServiceImpl implements UserService {
private UserMapper userMapper; private PasswordEncoder passwordEncoder;
public UserServiceImpl(UserMapper userMapper, PasswordEncoder passwordEncoder) { this.userMapper = userMapper; this.passwordEncoder = passwordEncoder; }
@Override public User findByUsername(String username) { return userMapper.findByUsername(username); }
@Override public void register(String username, String password) { String encode = passwordEncoder.encode(password); userMapper.add(username, encode); } }
|
UserController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| @RestController @RequestMapping("/user") public class UserController {
private UserService userService;
public UserController(UserService userService) { this.userService = userService; }
@PostMapping public Result register(String username, String password) { User u = userService.findByUsername(username); if(u != null) { return Result.fail(1, "用户名已被占用"); }else{ userService.register(username, password); return Result.success(); } } }
|
由于密码不能明文存储,所以要进行加密处理,这里使用Spring Security提供的PasswordEncoder接口来进行加密处理。
在config包下创建一个SecurityConfig类,用于配置Spring Security。
1 2 3 4 5 6 7 8
| @Configuration public class SecurityConfig {
@Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
|