飞道的博客

spring boot简单实现登陆注册功能demo

507人阅读  评论(0)

spring boot 、maven、mybatis-plus、postman

需要安装idea、jvm、maven、mysql

采用调用接口的形式返回给前端

纯接口,没有.jsp,没有.html

 

接口功能:

1、登陆:

1)输入用户名密码登陆

2)使用md5加密与数据库的密文做验证

2、注册:

1)输入用户名、密码、性别、年龄、电话号码

2)用户名、密码、年龄、电话号码均采用正则校验规范

3、通过用户名获取用户数据

1)输入用户名

4、获取所有用户的所有数据

 

参考我的另一篇博客新建spring boot项目

https://blog.csdn.net/obitosbb/article/details/116002990

 

 

ApiRest.class


  
  1. package com.example.demo02.commom.resp;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Builder;
  4. import lombok.Data;
  5. import lombok.NoArgsConstructor;
  6. @Data
  7. @AllArgsConstructor
  8. @NoArgsConstructor
  9. @Builder
  10. public class ApiResp <T> {
  11. /**
  12. * true: 成功的
  13. * false: 失败的
  14. */
  15. private boolean success;
  16. /**
  17. * 错误码
  18. */
  19. private String code;
  20. /**
  21. * 错误信息
  22. */
  23. private String msg;
  24. /**
  25. * 数据
  26. */
  27. private T data;
  28. /**
  29. * 单纯返回成功响应
  30. * @return
  31. */
  32. public static <T> ApiResp repuestMessage(boolean success,String code,String msg,T data){
  33. ApiResp apiResp = ApiResp.builder().success( true).code(code).msg(msg).data(data).build();
  34. return apiResp;
  35. }
  36. public static ApiResp successResp(){
  37. ApiResp apiResp = ApiResp.builder().success( true).build();
  38. return apiResp;
  39. }
  40. public static <T> ApiResp successResp(String msg,T data){
  41. ApiResp apiResp = ApiResp.builder().success( true).msg(msg).data(data).build();
  42. return apiResp;
  43. }
  44. public static <T> ApiResp successResp(String code,String msg,T data){
  45. ApiResp apiResp = ApiResp.builder().success( true).code(code).msg(msg).data(data).build();
  46. return apiResp;
  47. }
  48. public static ApiResp failResp(){
  49. ApiResp apiResp = ApiResp.builder().success( false).build();
  50. return apiResp;
  51. }
  52. public static ApiResp failResp(String msg){
  53. ApiResp apiResp = ApiResp.builder().success( false).code( "1111").msg(msg).build();
  54. return apiResp;
  55. }
  56. public static ApiResp failResp(String code, String msg){
  57. ApiResp apiResp = ApiResp.builder().success( false).code(code).msg(msg).build();
  58. return apiResp;
  59. }
  60. public static <T> ApiResp failResp(String code,String msg,T data){
  61. ApiResp apiResp = ApiResp.builder().success( false).code(code).msg(msg).data(data).build();
  62. return apiResp;
  63. }
  64. public static <T> ApiResp inputSpecification(String msg){
  65. ApiResp apiResp = ApiResp.builder().msg(msg).build();
  66. return apiResp;
  67. }
  68. }

Demo01Controller.class


  
  1. package com.example.demo02.controller;
  2. import com.example.demo02.commom.resp.ApiResp;
  3. import com.example.demo02.model.Demo01;
  4. import com.example.demo02.service.IDemo01Service;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.springframework.web.bind.annotation.*;
  7. import javax.annotation.Resource;
  8. import java.util.HashMap;
  9. import java.util.Scanner;
  10. import java.util.List;
  11. import java.util.Map;
  12. /**
  13. * <p>
  14. * 用户信息表 前端控制器
  15. * </p>
  16. *
  17. * @author AutoCoder
  18. * @since 2021-04-10
  19. */
  20. @RestController
  21. @RequestMapping("/test")
  22. @Slf4j
  23. public class Demo01Controller {
  24. @Resource
  25. private IDemo01Service demo01Service;
  26. @GetMapping("/message")
  27. public List<Demo01> message(){
  28. List<Demo01> demo01 = demo01Service.message();
  29. return demo01;
  30. }
  31. @PostMapping("/userMessage")
  32. public ApiResp userMessage(@RequestBody Demo01 demo01){
  33. demo01 = demo01Service.selectMessage(demo01.getUsername());
  34. return demo01 == null ? ApiResp.failResp( "查询失败"):ApiResp.successResp( "查询成功",demo01);
  35. }
  36. @PostMapping("/login")
  37. public ApiResp login(@RequestBody Demo01 demo01){
  38. Demo01 demo011 = demo01Service.isRegistration(demo01.getUsername(),demo01.getPassword());
  39. //log.info("[Demo01Controller.serverStart] demo011 = {}",JSON.toJSONString(demo011));
  40. if( null == demo011){
  41. //log.info("[Demo01Controller.serverStart] 登陆失败");
  42. return ApiResp.failResp( "登陆失败");
  43. }
  44. demo011.setPassword( "");
  45. return ApiResp.successResp( "登陆成功",demo011);
  46. }
  47. @PostMapping("/registration")
  48. public ApiResp registration(@RequestBody Demo01 demo01){
  49. //int demo011 = demo01Service.addUser(demo01.getUsername(),demo01.getPassword(), demo01.isSex(), demo01.getPhone(),demo01.getAge());
  50. //return demo011 == 0 ? ApiResp.repuestMessage(false,"400","注册失败",demo011):ApiResp.repuestMessage(true,"200","注册成功",demo011);
  51. ApiResp demo011 = demo01Service.addUser(demo01.getUsername(),demo01.getPassword(), demo01.isSex(), demo01.getPhone(),demo01.getAge());
  52. return demo011;
  53. }
  54. }

Demo01Mapper.interface


  
  1. package com.example.demo02.mapper;
  2. import com.example.demo02.commom.resp.ApiResp;
  3. import com.example.demo02.model.Demo01;
  4. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  5. import org.apache.ibatis.annotations.Insert;
  6. import org.apache.ibatis.annotations.Param;
  7. import org.apache.ibatis.annotations.Select;
  8. import java.util.List;
  9. /**
  10. * <p>
  11. * 用户信息表 Mapper 接口
  12. * </p>
  13. *
  14. * @author AutoCoder
  15. * @since 2021-04-10
  16. */
  17. public interface Demo01Mapper extends BaseMapper<Demo01> {
  18. @Select("select * from demo01 where username = #{username} and password = #{password}")
  19. public Demo01 isRegistration(@Param("username") String Username,@Param("password") String password);
  20. @Insert("insert into demo01(username,password,sex,phone,age) values(#{username},#{password},#{sex},#{phone},#{age})")
  21. public int addUser(@Param("username") String username, @Param("password") String password, @Param("sex") boolean sex, @Param("phone") String phone, @Param("age") int age);
  22. @Select("select * from demo01 where username=#{username}")
  23. public Demo01 selectMessage(@Param("username") String username);
  24. @Select("select * from demo01")
  25. public List<Demo01> message();
  26. }

Demo01.class


  
  1. package com.example.demo02.model;
  2. import com.baomidou.mybatisplus.annotation.IdType;
  3. import com.baomidou.mybatisplus.extension.activerecord.Model;
  4. import com.baomidou.mybatisplus.annotation.TableId;
  5. import lombok.Data;
  6. import lombok.EqualsAndHashCode;
  7. import lombok.NoArgsConstructor;
  8. import lombok.experimental.Accessors;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. /**
  11. * <p>
  12. * 用户信息表
  13. * </p>
  14. *
  15. * @author AutoCoder
  16. * @since 2021-04-10
  17. */
  18. @Data
  19. @EqualsAndHashCode(callSuper = true)
  20. @Accessors(chain = true)
  21. public class Demo01 extends Model {
  22. private static final long serialVersionUID = 1L;
  23. @TableId(value = "userid", type = IdType.AUTO)
  24. private Integer userid;
  25. //@Resource
  26. @Autowired
  27. private String username;
  28. @Autowired
  29. private String password;
  30. @Autowired
  31. private int age;
  32. @Autowired
  33. private boolean sex;
  34. @Autowired
  35. private String phone;
  36. }
Demo01ServiceImpl.class

  
  1. package com.example.demo02.service.impl;
  2. import com.example.demo02.commom.resp.ApiResp;
  3. import com.example.demo02.model.Demo01;
  4. import com.example.demo02.mapper.Demo01Mapper;
  5. import com.example.demo02.service.IDemo01Service;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import org.springframework.stereotype.Service;
  8. import java.util.regex.Matcher;
  9. import java.util.regex.Pattern;
  10. import java.util.List;
  11. /**
  12. * <p>
  13. * 用户信息表 服务实现类
  14. * </p>
  15. *
  16. * @author AutoCoder
  17. * @since 2021-04-10
  18. */
  19. @Service
  20. public class Demo01ServiceImpl extends ServiceImpl<Demo01Mapper, Demo01> implements IDemo01Service {
  21. //帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)
  22. public boolean isUsername(String username){
  23. String pattern = "^[a-zA-Z][a-zA-Z0-9_]{4,15}$";
  24. Pattern r = Pattern.compile(pattern);
  25. Matcher m = r.matcher(username);
  26. return m.matches();
  27. }
  28. //强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间)
  29. public boolean isPassword(String password){
  30. String pattern = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$";
  31. Pattern r = Pattern.compile(pattern);
  32. Matcher m = r.matcher(password);
  33. return m.matches();
  34. }
  35. //手机号码
  36. public boolean isPhone(String phone){
  37. String pattern = "^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$";
  38. Pattern r = Pattern.compile(pattern);
  39. Matcher m = r.matcher(phone);
  40. return m.matches();
  41. }
  42. public boolean isAge(int age){
  43. if(age> 1&&age> 150){
  44. return false;
  45. }
  46. return true;
  47. }
  48. public List<Demo01> message(){
  49. return baseMapper.message();
  50. }
  51. //是否已经注册
  52. public Demo01 isRegistration(String username,String password){
  53. password=MessageDigest5.interfaceMd5(password, "utf-8");
  54. return baseMapper.isRegistration(username, password);
  55. }
  56. //增加用户
  57. public ApiResp addUser(String username, String password, boolean sex, String phone, int age){
  58. password=MessageDigest5.interfaceMd5(password, "utf-8");
  59. String inputSpecification;
  60. if(!isUsername(username)){
  61. System.out.println( "-------------用户名规范-------------");
  62. return ApiResp.inputSpecification( "用户名不符合规范");
  63. }
  64. // if(!isPassword(password)){
  65. // return ApiResp.inputSpecification("密码不符合规范");
  66. // }
  67. if(!isPhone(phone)){
  68. return ApiResp.inputSpecification( "电话号码不符合规范");
  69. }
  70. if(!isAge(age)){
  71. return ApiResp.inputSpecification( "年龄不符合规范");
  72. }
  73. else{
  74. baseMapper.addUser(username,password,sex,phone,age);
  75. return ApiResp.inputSpecification( "注册信息符合规范");
  76. }
  77. }
  78. //查询用户信息
  79. public Demo01 selectMessage(String username){
  80. return baseMapper.selectMessage(username);
  81. }
  82. }

MessageDigest5.class


  
  1. package com.example.demo02.service.impl;
  2. import java.security.MessageDigest;
  3. public class MessageDigest5 {
  4. private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
  5. /**
  6. * 将1个字节(1 byte = 8 bit)转为 2个十六进制位 1个16进制位 = 4个二进制位 (即4 bit)
  7. * 转换思路:最简单的办法就是先将byte转为10进制的int类型,然后将十进制数转十六进制
  8. */
  9. private static String byteToHexString(byte b) {
  10. // byte类型赋值给int变量时,java会自动将byte类型转int类型,从低位类型到高位类型自动转换
  11. int n = b;
  12. // 将十进制数转十六进制
  13. if (n < 0)
  14. n += 256;
  15. int d1 = n / 16;
  16. int d2 = n % 16;
  17. // d1和d2通过访问数组变量的方式转成16进制字符串;比如 d1 为12 ,那么就转为"c";
  18. // 因为int类型不会有a,b,c,d,e,f等表示16进制的字符
  19. return hexDigits[d1] + hexDigits[d2];
  20. }
  21. /**
  22. * 将字节数组里每个字节转成2个16进制位的字符串后拼接起来
  23. */
  24. private static String byteArrayToHexString(byte b[]) {
  25. StringBuffer resultSb = new StringBuffer();
  26. for ( int i = 0; i < b.length; i++) {
  27. resultSb.append(byteToHexString(b[i]));
  28. }
  29. return resultSb.toString();
  30. }
  31. /**
  32. * MD5算法 默认固定长度是 128bit 即 32个16进制位 String origin :需要进行MD5计算的字符串 String
  33. * charsetname :MD5算法的编码
  34. */
  35. private static String MD5_32(String origin, String charsetname) {
  36. String resultString = null;
  37. try {
  38. // 1,创建MessageDigest对象
  39. MessageDigest md = MessageDigest.getInstance( "MD5");
  40. // 2,向MessageDigest传送要计算的数据;传入的数据需要转化为指定编码的字节数组
  41. md.update(origin.getBytes(charsetname));
  42. // 3,计算摘要
  43. byte[] bytesResult = md.digest();
  44. // 第2步和第3步可以合并成下面一步
  45. // byte[] bytesResult = md.digest(origin.getBytes(charsetname));
  46. // 4,将字节数组转换为16进制位
  47. resultString = byteArrayToHexString(bytesResult);
  48. } catch (Exception e) {
  49. e.printStackTrace();
  50. }
  51. return resultString;
  52. }
  53. public static String interfaceMd5(String origin, String charsetname){
  54. return MD5_32(origin,charsetname);
  55. }
  56. }
IDemo01Service.interface

  
  1. package com.example.demo02.service;
  2. import com.example.demo02.commom.resp.ApiResp;
  3. import com.example.demo02.model.Demo01;
  4. import com.baomidou.mybatisplus.extension.service.IService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import java.util.List;
  7. /**
  8. * <p>
  9. * 用户信息表 服务类
  10. * </p>
  11. *
  12. * @author AutoCoder
  13. * @since 2021-04-10
  14. */
  15. public interface IDemo01Service extends IService<Demo01> {
  16. //int addUser(String username,String password,String sex,String phone,int age);
  17. Demo01 isRegistration(String username,String password);
  18. ApiResp addUser(String username, String password, boolean sex, String phone, int age);
  19. Demo01 selectMessage(String username);
  20. boolean isUsername(String username);
  21. boolean isPassword(String password);
  22. boolean isPhone(String phone);
  23. boolean isAge(int age);
  24. List<Demo01> message();
  25. }

数据库表

postman展示-注册功能

postman展示-登陆功能

postman展示-获取所有用户的所有数据

 

 

可能会遇到的问题和解决方案

1、不会新建Spring boot工程

解决:参看这篇文章开头的链接里的文章

2、新建的Spring boot工程跑不起来

解决:文件夹是否建错地方,数据库名、表名、密码、驱动是否修改

3、pom.xml一堆红线

解决:Spring boot自动加载,编译即可

4、直接复制有些类名就标红

解决:直接复制idea不自动加载,手打出来类名,标红的变黑后再删掉自己打的

 

 

欢迎交流讨论

 


转载:https://blog.csdn.net/obitosbb/article/details/116003854
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场