当前位置:   article > 正文

SpringBoot实现登陆注册(附源码)_spring boot登录页面设计代码

spring boot登录页面设计代码

此项目前端由html+css+vue(发送请求)组成,后端由springboot进行处理请求,相关数据库操作语句选用的是mybatis-plus

        先看看我的项目总结吧:

先说完美的吧,因为前端登陆注册界面是之前的,这次就复制了一下,在前端部分仅书写了一些vue,使用v-model绑定username以及password,发送axios请求,后端那部分因为使用的是mybatis-plus,也没有编写一些sql语句,当然,这些sql语句也不是很复杂的,有时间的小伙伴可以直接试着编写,或在我这基础上进行修改,controller层的话,就是一些逻辑语句,例如:登陆时先判断数据库中是否存在该用户,若存在再进行密码比对,注册时则是先判断用户是否已经注册,存在数据库中,若不存在再让其进行注册。总而言之,此项目花费不到四十分钟,总体还是不错对于新手小白来说,我认为困难的部分则是在前后端交互那个地方,存在一些差异,二者的数据格式不统一。

        不足的地方,就是界面过于简单,没有啥js效果,效果非常直接,以及vue发送请求需要多加练习。

先看项目运行后主界面效果:

登陆界面如下:

注册界面如下:

 

项目目录结构如下:

 

1.数据库中表的设计

1.1 创建一个表其中有两个字段一个用户名(varcahr类型,primary key)一个密码(varchar类型)

1.2 表结构如下所示

2.需要导入的jar包(pom.xml文件)以及相关配置设置(数据库信息以及端口)

2.1文件具体相关代码如下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.5.4</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.wz</groupId>
  12. <artifactId>LogAndRegister</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>LogAndRegister</name>
  15. <description>LogAndRegister</description>
  16. <dependencies>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter</artifactId>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-test</artifactId>
  24. <scope>test</scope>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter-web</artifactId>
  29. <scope>compile</scope>
  30. </dependency>
  31. <dependency>
  32. <groupId>com.baomidou</groupId>
  33. <artifactId>mybatis-plus-boot-starter</artifactId>
  34. <version>3.4.2</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.projectlombok</groupId>
  38. <artifactId>lombok</artifactId>
  39. <version>1.18.20</version>
  40. </dependency>
  41. <dependency>
  42. <groupId>com.alibaba</groupId>
  43. <artifactId>fastjson</artifactId>
  44. <version>1.2.76</version>
  45. </dependency>
  46. <dependency>
  47. <groupId>commons-lang</groupId>
  48. <artifactId>commons-lang</artifactId>
  49. <version>2.6</version>
  50. </dependency>
  51. <dependency>
  52. <groupId>mysql</groupId>
  53. <artifactId>mysql-connector-java</artifactId>
  54. <scope>runtime</scope>
  55. </dependency>
  56. <dependency>
  57. <groupId>com.alibaba</groupId>
  58. <artifactId>druid-spring-boot-starter</artifactId>
  59. <version>1.1.23</version>
  60. </dependency>
  61. </dependencies>
  62. <build>
  63. <plugins>
  64. <plugin>
  65. <groupId>org.springframework.boot</groupId>
  66. <artifactId>spring-boot-maven-plugin</artifactId>
  67. </plugin>
  68. </plugins>
  69. </build>
  70. </project>

2.2数据库信息以及端口

  1. server:
  2. port: 81
  3. spring:
  4. datasource:
  5. druid:
  6. driver-class-name: com.mysql.cj.jdbc.Driver
  7. url: jdbc:mysql://localhost:3306/logandregister
  8. username: root
  9. password: 111111

3.后端相关代码的编写

 3.1 后端返回给前端的信息封装在R类中

  1. @Data
  2. public class R<T> {
  3. private Integer code; //编码:1成功,0和其它数字为失败
  4. private String msg; //错误信息
  5. private T data; //数据
  6. private Map map = new HashMap(); //动态数据
  7. public static <T> R<T> success(T object) {
  8. R<T> r = new R<T>();
  9. r.data = object;
  10. r.code = 1;
  11. return r;
  12. }
  13. public static <T> R<T> error(String msg) {
  14. R r = new R();
  15. r.msg = msg;
  16. r.code = 0;
  17. return r;
  18. }
  19. public R<T> add(String key, Object value) {
  20. this.map.put(key, value);
  21. return this;
  22. }
  23. }

3.2 User实体类(即用户的信息(账号密码))

  1. @Data
  2. @AllArgsConstructor
  3. @NoArgsConstructor
  4. public class User {
  5. private String username;
  6. private String password;
  7. }

3.3 Controller(控制层相关代码,处理前端发送的请求)

  1. @RestController
  2. @RequestMapping("/user")
  3. @Slf4j
  4. public class UserController {
  5. @Autowired
  6. private UserService userService;
  7. @PostMapping("/login")
  8. public R<String> login(@RequestBody User user){
  9. log.info("user:{}",user);
  10. LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();
  11. lqw.eq(User::getUsername,user.getUsername());
  12. User one = userService.getOne(lqw);
  13. System.out.println(one);
  14. // 查询不到用户
  15. if (one == null){
  16. return R.error("用户账号不存在");
  17. }
  18. // 密码错误
  19. if(!one.getPassword().equals(user.getPassword())){
  20. return R.error("密码错误");
  21. }
  22. return R.success("登陆成功");
  23. }
  24. @PostMapping("/register")
  25. public R<String> register(@RequestBody User user){
  26. log.info("user:{}",user);
  27. // 判断前端传来的数据是否正常
  28. if (user==null){
  29. return R.error("请输入注册信息");
  30. }
  31. // 判断账号是否存在
  32. String username = user.getUsername();
  33. LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  34. lambdaQueryWrapper.eq(User::getUsername,username);
  35. User one = userService.getOne(lambdaQueryWrapper);
  36. if (one!=null){
  37. return R.error("用户账号已注册");
  38. }
  39. // 二者都满足则以下
  40. userService.save(user);
  41. return R.success("注册成功");
  42. }
  43. }

3.4 Mapper层相关代码

  1. @Mapper
  2. public interface UserMapper extends BaseMapper<User> {
  3. }

3.5 定义的Service接口代码

  1. public interface UserService extends IService<User> {
  2. }

3.6实现Service接口的实现类

  1. @Service
  2. public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
  3. }

4.前端相关代码

4.1 登陆界面login.html(包含vue发送请求)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>login</title>
  6. <link href="css/login.css" rel="stylesheet">
  7. </head>
  8. <body>
  9. <div id="loginDiv">
  10. <form id="form" >
  11. <h1 id="loginMsg">LOGIN IN</h1>
  12. <p>Username:<input id="username" name="username" type="text" v-model="userName"></p>
  13. <p>Password:<input id="password" name="password" type="password" v-model="passWord"></p>
  14. <div id="subDiv">
  15. <input type="submit" class="button" value="login up" @click="login">
  16. <input type="reset" class="button" value="reset" >
  17. <a href="register.html">没有账号?点击注册</a>
  18. </div>
  19. </form>
  20. </div>
  21. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  22. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  23. <script>
  24. var app = new Vue({
  25. el: "#loginDiv",
  26. data: {
  27. userName: "",
  28. passWord: "",
  29. },
  30. methods: {
  31. login:function (){
  32. console.log(this.userName,this.passWord);
  33. axios.post('http://localhost:81/user/login',
  34. {
  35. username: this.userName,
  36. password: this.passWord,
  37. }).then( resp=> {
  38. console.log(resp)
  39. if (resp.data.code == '1') {
  40. window.location.href = 'loginSuccess.html';
  41. }else {
  42. alert("账号或密码错误");
  43. this.userName='';
  44. this.passWord='';
  45. }
  46. })
  47. }
  48. }
  49. })
  50. </script>
  51. </body>
  52. </html>

4.2 注册界面register.html(包含vue发送请求)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>欢迎注册</title>
  6. <link href="css/register.css" rel="stylesheet">
  7. </head>
  8. <body>
  9. <div class="form-div">
  10. <div class="reg-content">
  11. <h1>欢迎注册</h1>
  12. <span>已有帐号?</span> <a href="login.html">登录</a>
  13. </div>
  14. <form id="reg-form">
  15. <table>
  16. <tr>
  17. <td>用户名</td>
  18. <td class="inputs">
  19. <input name="username" type="text" id="username" v-model="userName">
  20. <br>
  21. <span id="username_err" class="err_msg" style="display: none">用户名不太受欢迎</span>
  22. </td>
  23. </tr>
  24. <tr>
  25. <td>密码</td>
  26. <td class="inputs">
  27. <input name="password" type="password" id="password" v-model="passWord">
  28. <br>
  29. <span id="password_err" class="err_msg" style="display: none">密码格式有误</span>
  30. </td>
  31. </tr>
  32. </table>
  33. <div class="buttons">
  34. <input value="注 册" type="submit" id="reg_btn" @click="register">
  35. </div>
  36. <br class="clear">
  37. </form>
  38. </div>
  39. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  40. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  41. <script>
  42. var app = new Vue({
  43. el: "#reg-form",
  44. data: {
  45. userName: "",
  46. passWord: "",
  47. },
  48. methods: {
  49. register: function () {
  50. console.log(this.userName, this.passWord);
  51. axios.post('http://localhost:81/user/register',
  52. {
  53. username: this.userName,
  54. password: this.passWord,
  55. }).then(resp => {
  56. console.log(resp)
  57. if (resp.data.code == '1') {
  58. alert(resp.data.data);
  59. window.location.href = 'login.html';
  60. } else {
  61. console.log(resp.data.data);
  62. alert(resp.data.data);
  63. this.userName = '';
  64. this.passWord = '';
  65. }
  66. })
  67. }
  68. }
  69. })
  70. </script>
  71. </body>
  72. </html>

5.项目完毕总结

        先说完美的吧,因为前端登陆注册界面是之前的,这次就复制了一下,在前端部分仅书写了一些vue,使用v-model绑定username以及password,发送axios请求,后端那部分因为使用的是mybatis-plus,也没有编写一些sql语句,当然,这些sql语句也不是很复杂的,有时间的小伙伴可以直接试着编写,或在我这基础上进行修改,controller层的话,就是一些逻辑语句,例如:登陆时先判断数据库中是否存在该用户,若存在再进行密码比对,注册时则是先判断用户是否已经注册,存在数据库中,若不存在再让其进行注册。总而言之,此项目花费不到四十分钟,总体还是不错对于新手小白来说,我认为困难的部分则是在前后端交互那个地方,存在一些差异,二者的数据格式不统一。

        不足的地方,就是界面过于简单,没有啥js效果,效果非常直接,以及vue发送请求需要多加练习。

有需要的小伙伴可以后台私信我发源码哦,码文不易,小伙伴可以点个赞哦!!!

        

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/48551
推荐阅读
相关标签
  

闽ICP备14008679号