• 论文管理系统(登录功能)


     

    目录

     

    一、后端部分

    1.1 实体类

     1.2 UserMapper类

     1.3 Service层

    接口

    实现类 

     1.4 controller层

     1.5 拦截器

     二、前端部分

    效果图

    源码如下 

     代码讲解

     


    准备工作和数据库都已经准备好了,接下来我们来写登录功能,登录功能我们通过mybatisplus来码写,所以不需要在UserMapper.xml里面写入sql语句

    一、后端部分

    1.1 实体类

    HttpResult 实体类是用来给前端传递数据

    1. package com.woniu.paper.entity;
    2. import lombok.AllArgsConstructor;
    3. import lombok.Data;
    4. import lombok.NoArgsConstructor;
    5. @Data
    6. @AllArgsConstructor
    7. @NoArgsConstructor
    8. public class HttpResult {
    9. private Object data;
    10. private int pageTotle;
    11. private int code;//200=成功,500=失败
    12. private String msg;//给前端的提示
    13. }

     

    1. package com.woniu.paper.entity;
    2. import com.baomidou.mybatisplus.annotation.IdType;
    3. import com.baomidou.mybatisplus.annotation.TableId;
    4. import com.baomidou.mybatisplus.annotation.TableName;
    5. import java.io.Serializable;
    6. /**
    7. *

    8. *
    9. *

    10. *
    11. * @author zhang
    12. * @since 2022-11-18
    13. */
    14. @TableName("t_user")
    15. public class User implements Serializable {
    16. private static final long serialVersionUID = 1L;
    17. @TableId(value = "id", type = IdType.AUTO)
    18. private Long id;
    19. /**
    20. * 用户账号
    21. */
    22. private String userCode;
    23. /**
    24. * 用户名
    25. */
    26. private String userName;
    27. /**
    28. * 用户密码
    29. */
    30. private String userPassword;
    31. public Long getId() {
    32. return id;
    33. }
    34. public void setId(Long id) {
    35. this.id = id;
    36. }
    37. public String getUserCode() {
    38. return userCode;
    39. }
    40. public void setUserCode(String userCode) {
    41. this.userCode = userCode;
    42. }
    43. public String getUserName() {
    44. return userName;
    45. }
    46. public void setUserName(String userName) {
    47. this.userName = userName;
    48. }
    49. public String getUserPassword() {
    50. return userPassword;
    51. }
    52. public void setUserPassword(String userPassword) {
    53. this.userPassword = userPassword;
    54. }
    55. @Override
    56. public String toString() {
    57. return "User{" +
    58. "id=" + id +
    59. ", userCode=" + userCode +
    60. ", userName=" + userName +
    61. ", userPassword=" + userPassword +
    62. "}";
    63. }
    64. }

     

     1.2 UserMapper类

    1. package com.woniu.paper.mapper;
    2. import com.woniu.paper.entity.HttpResult;
    3. import com.woniu.paper.entity.User;
    4. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    5. /**
    6. *

    7. * Mapper 接口
    8. *

    9. *
    10. * @author zhang
    11. * @since 2022-11-18
    12. */
    13. public interface UserMapper extends BaseMapper {
    14. public HttpResult login(String userCode, String pwd);
    15. }

     

     1.3 Service层

    接口

    1. package com.woniu.paper.service;
    2. import com.woniu.paper.entity.HttpResult;
    3. import com.woniu.paper.entity.User;
    4. import com.baomidou.mybatisplus.extension.service.IService;
    5. /**
    6. *

    7. * 服务类
    8. *

    9. *
    10. * @author zhang
    11. * @since 2022-11-18
    12. */
    13. public interface IUserService {
    14. public HttpResult login(String userCode, String pwd);
    15. }

    实现类 

    1. package com.woniu.paper.service.impl;
    2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    3. import com.woniu.paper.entity.HttpResult;
    4. import com.woniu.paper.entity.User;
    5. import com.woniu.paper.mapper.UserMapper;
    6. import com.woniu.paper.service.IUserService;
    7. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    8. import org.springframework.beans.factory.annotation.Autowired;
    9. import org.springframework.stereotype.Service;
    10. import redis.clients.jedis.Jedis;
    11. /**
    12. *

    13. * 服务实现类
    14. *

    15. *
    16. * @author zhang
    17. * @since 2022-11-18
    18. */
    19. @Service
    20. public class UserServiceImpl implements IUserService {
    21. @Autowired(required = false)
    22. private UserMapper userMapper;
    23. @Override
    24. public HttpResult login(String userCode, String pwd) {
    25. //创建条件构造器对象,构造select条件
    26. QueryWrapper queryWrapper = new QueryWrapper();
    27. //构造查询条件
    28. queryWrapper.eq("user_code", userCode);
    29. queryWrapper.eq("user_password", pwd);
    30. User user = userMapper.selectOne(queryWrapper);
    31. HttpResult result = null;
    32. if (user != null) {
    33. //登录成功,将用户的id保存到redis中
    34. Jedis jedis = new Jedis("127.0.0.1", 6379);
    35. //将用户id保存到redis数据库中
    36. jedis.set(user.getId() + "", user.getId() + "");//加冒号是因为key是字符串形式
    37. jedis.close();//释放资源
    38. result = new HttpResult(user, 0, 200, "登录成功");
    39. } else {
    40. result = new HttpResult(null, 0, 500, "登录失败");
    41. }
    42. return result;
    43. }
    44. }

     1.4 controller层

     

    1. package com.woniu.paper.controller;
    2. import com.woniu.paper.entity.HttpResult;
    3. import com.woniu.paper.service.IUserService;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. import org.springframework.web.bind.annotation.CrossOrigin;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import org.springframework.stereotype.Controller;
    8. import org.springframework.web.bind.annotation.RestController;
    9. /**
    10. *

    11. * 前端控制器
    12. *

    13. *
    14. * @author zhang
    15. * @since 2022-11-18
    16. */
    17. @RestController
    18. @RequestMapping("/paper/user")
    19. public class UserController {
    20. @Autowired
    21. private IUserService userService;
    22. @RequestMapping("/login")
    23. @CrossOrigin(origins = "*")
    24. public HttpResult login(String userCode, String pwd) {
    25. return userService.login(userCode, pwd);
    26. }
    27. }

     1.5 拦截器

    拦截器的创建可以看专栏拦截器中的创建教程了解 

    1. package com.woniu.paper.interceptors;
    2. import org.springframework.context.annotation.Configuration;
    3. import org.springframework.web.servlet.HandlerAdapter;
    4. import org.springframework.web.servlet.HandlerInterceptor;
    5. import org.springframework.web.servlet.ModelAndView;
    6. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    7. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    8. import redis.clients.jedis.Jedis;
    9. import javax.servlet.http.HttpServletRequest;
    10. import javax.servlet.http.HttpServletResponse;
    11. @Configuration
    12. public class AuthInterceptor extends WebMvcConfigurerAdapter {
    13. @Override
    14. public void addInterceptors(InterceptorRegistry registry) {
    15. HandlerInterceptor handlerInterceptor=new HandlerInterceptor() {
    16. @Override
    17. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    18. boolean isGo=false;
    19. String url= request.getRequestURI();//获取当前请求的数据接口路径
    20. System.out.println("当前路径是"+url);
    21. //获取用户请求时传递的uid
    22. String uid=request.getParameter("uid");
    23. //获取根据uid查询redis中是否有对应的数据
    24. Jedis jedis = new Jedis("127.0.0.1", 6379);
    25. if (url.contains("/paper/user/login")){
    26. isGo=true;//如果是登录就放行
    27. }else if (jedis.get(uid)!=null){//以id为key从redis数据库中查询数据
    28. //如果用户传递的uid的值和redis中保存的uid的值一致,则放行
    29. isGo=true;
    30. }
    31. jedis.close();//释放资源
    32. return isGo;
    33. }
    34. @Override
    35. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    36. }
    37. @Override
    38. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    39. }
    40. };
    41. registry.addInterceptor(handlerInterceptor).addPathPatterns("/**");
    42. }
    43. }

    登录成功会显示属性信息 

    密码错误则是会被拦截,即空白页面没有内容 

     

     二、前端部分

    效果图

    源码如下 

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. <link href="assets/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
    7. <script src="assets/jquery-3.5.1.min.js">script>
    8. <script src="assets/bootstrap-3.3.7-dist/js/bootstrap.min.js">script>
    9. <script src="assets/vue.min-v2.5.16.js">script>
    10. <script src="assets/vue-router.min-2.7.0.js">script>
    11. <script src="assets/axios.min.js">script>
    12. head>
    13. <body>
    14. <div id="app" class="container">
    15. <div class="row">
    16. <div class="col-md-6 col-md-offset-3">
    17. <label>用户名label>
    18. <input type="text" size="12" class="form-control" v-model="userCode">
    19. <label>密码label>
    20. <input type="password" size="12" class="form-control" v-model="pwd">
    21. <button class="btn btn-primary" @click="doLogin">登录button>
    22. div>
    23. div>
    24. div>
    25. <script>
    26. new Vue({
    27. el:'#app',
    28. data:{
    29. userCode:null,
    30. pwd:null
    31. },
    32. methods:{
    33. doLogin(){
    34. var url = "http://127.0.0.1:8080/paper/user/login?userCode="+this.userCode+"&pwd="+this.pwd;
    35. axios.get(url).then(response=>{
    36. console.log(response.data)
    37. if (response.data.code==200){//登录成功
    38. //将用户的id保存起来localStorage)
    39. localStorage.setItem("uid",response.data.data.id);
    40. //进入首页
    41. console.log("进入首页")
    42. window.location.href="index.html";
    43. }else{//登录失败
    44. alert(response.data.msg);
    45. }
    46. });
    47. }
    48. }
    49. });
    50. script>
    51. body>
    52. html>

     代码讲解

    1. <link href="assets/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
    2. <script src="assets/jquery-3.5.1.min.js">script>
    3. <script src="assets/bootstrap-3.3.7-dist/js/bootstrap.min.js">script>
    4. <script src="assets/vue.min-v2.5.16.js">script>
    5. <script src="assets/vue-router.min-2.7.0.js">script>
    6. <script src="assets/axios.min.js">script>

     

     

     

     

     

     

     

     

  • 相关阅读:
    常用工具类commons-io的学习使用
    Dubbo架构设计及入门案例
    iOS应用程序数据保护:如何保护iOS应用程序中的图片、资源和敏感数据
    Linux学习之:环境变量
    Linux——文本编辑器(Vi)详解介绍
    【Flutter】Flutter 中 http 1.0.0 使用简要说明
    什么是APS系统?导入APS要注意什么?值得反复观看
    Servlet之重定向和请求转发
    CSS详细基础(五)选择器的优先级
    【C++】类和对象(中)
  • 原文地址:https://blog.csdn.net/magic_818/article/details/127933863