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

news2025/7/14 5:34:45

 

目录

 

一、后端部分

1.1 实体类

 1.2 UserMapper类

 1.3 Service层

接口

实现类 

 1.4 controller层

 1.5 拦截器

 二、前端部分

效果图

源码如下 

 代码讲解

 


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

一、后端部分

1.1 实体类

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

package com.woniu.paper.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class HttpResult {
    private Object data;
    private int pageTotle;
    private int code;//200=成功,500=失败
    private String msg;//给前端的提示
}

 

package com.woniu.paper.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
/**
 * <p>
 * 
 * </p>
 *
 * @author zhang
 * @since 2022-11-18
 */
@TableName("t_user")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户账号
     */
    private String userCode;

    /**
     * 用户名
     */
    private String userName;

    /**
     * 用户密码
     */
    private String userPassword;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
    public String getUserCode() {
        return userCode;
    }

    public void setUserCode(String userCode) {
        this.userCode = userCode;
    }
    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserPassword() {
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }

    @Override
    public String toString() {
        return "User{" +
            "id=" + id +
            ", userCode=" + userCode +
            ", userName=" + userName +
            ", userPassword=" + userPassword +
        "}";
    }
}

 

 1.2 UserMapper类

package com.woniu.paper.mapper;

import com.woniu.paper.entity.HttpResult;
import com.woniu.paper.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhang
 * @since 2022-11-18
 */
public interface UserMapper extends BaseMapper<User> {
    public HttpResult login(String userCode, String pwd);
}

 

 1.3 Service层

接口

package com.woniu.paper.service;

import com.woniu.paper.entity.HttpResult;
import com.woniu.paper.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhang
 * @since 2022-11-18
 */
public interface IUserService  {
    public HttpResult login(String userCode, String pwd);
}

实现类 

package com.woniu.paper.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.woniu.paper.entity.HttpResult;
import com.woniu.paper.entity.User;
import com.woniu.paper.mapper.UserMapper;
import com.woniu.paper.service.IUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author zhang
 * @since 2022-11-18
 */
@Service
public class UserServiceImpl implements IUserService {
    @Autowired(required = false)
    private UserMapper userMapper;

    @Override
    public HttpResult login(String userCode, String pwd) {

        //创建条件构造器对象,构造select条件
        QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
        //构造查询条件
        queryWrapper.eq("user_code", userCode);
        queryWrapper.eq("user_password", pwd);

        User user = userMapper.selectOne(queryWrapper);
        HttpResult result = null;
        if (user != null) {
            //登录成功,将用户的id保存到redis中
            Jedis jedis = new Jedis("127.0.0.1", 6379);
            //将用户id保存到redis数据库中
            jedis.set(user.getId() + "", user.getId() + "");//加冒号是因为key是字符串形式
            jedis.close();//释放资源
            result = new HttpResult(user, 0, 200, "登录成功");
        } else {
            result = new HttpResult(null, 0, 500, "登录失败");

        }
        return result;
    }
}

 1.4 controller层

 

package com.woniu.paper.controller;


import com.woniu.paper.entity.HttpResult;
import com.woniu.paper.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author zhang
 * @since 2022-11-18
 */
@RestController
@RequestMapping("/paper/user")
public class UserController {

    @Autowired
    private IUserService userService;

    @RequestMapping("/login")
    @CrossOrigin(origins = "*")
    public HttpResult login(String userCode, String pwd) {

        return userService.login(userCode, pwd);
    }

 
}

 1.5 拦截器

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

package com.woniu.paper.interceptors;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerAdapter;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import redis.clients.jedis.Jedis;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Configuration
public class AuthInterceptor  extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        HandlerInterceptor handlerInterceptor=new HandlerInterceptor() {
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
              boolean isGo=false;
               String url= request.getRequestURI();//获取当前请求的数据接口路径
                System.out.println("当前路径是"+url);
                //获取用户请求时传递的uid
                String uid=request.getParameter("uid");
                //获取根据uid查询redis中是否有对应的数据
                Jedis jedis = new Jedis("127.0.0.1", 6379);


                if (url.contains("/paper/user/login")){
                    isGo=true;//如果是登录就放行
                }else if (jedis.get(uid)!=null){//以id为key从redis数据库中查询数据
                    //如果用户传递的uid的值和redis中保存的uid的值一致,则放行
                    isGo=true;
                }
                jedis.close();//释放资源
                return isGo;
            }

            @Override
            public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

            }

            @Override
            public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

            }
        };
        registry.addInterceptor(handlerInterceptor).addPathPatterns("/**");
    }
}

登录成功会显示属性信息 

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

 

 二、前端部分

效果图

源码如下 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link href="assets/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="assets/jquery-3.5.1.min.js"></script>
    <script src="assets/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
    <script src="assets/vue.min-v2.5.16.js"></script>
    <script src="assets/vue-router.min-2.7.0.js"></script>
    <script src="assets/axios.min.js"></script>
</head>
<body>
<div id="app" class="container">
    <div class="row">
        <div class="col-md-6 col-md-offset-3">
            <label>用户名</label>
            <input type="text" size="12" class="form-control" v-model="userCode">
            <label>密码</label>
            <input type="password" size="12" class="form-control" v-model="pwd">
            <button class="btn btn-primary" @click="doLogin">登录</button>
        </div>
    </div>

</div>
<script>
    new Vue({
        el:'#app',
        data:{
            userCode:null,
            pwd:null
        },
        methods:{
            doLogin(){
                var url = "http://127.0.0.1:8080/paper/user/login?userCode="+this.userCode+"&pwd="+this.pwd;
                axios.get(url).then(response=>{
                    console.log(response.data)
                    if (response.data.code==200){//登录成功
                     //将用户的id保存起来localStorage)
                        localStorage.setItem("uid",response.data.data.id);
                        //进入首页
                        console.log("进入首页")
                        window.location.href="index.html";
                    }else{//登录失败
                        alert(response.data.msg);
                    }
                });
            }
        }
    });
</script>
</body>
</html>

 代码讲解

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

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

台灯到底对眼睛好不好?2022精选眼科医生推荐护眼灯

台灯是我们最常见的照明工具了&#xff0c;台灯对眼睛会有一定的伤害的&#xff0c;光对人的视觉会产生一些影响的&#xff0c;选择质量过关的护眼台灯&#xff0c;对人的眼睛伤害是比较小的&#xff0c;基本上在光照进行优化&#xff0c;做到无可视频闪、无眩光等&#xff0c;…

巯基化PEG试剂——N3-PEG-SH,Azide-PEG-Thiol,叠氮-聚乙二醇-巯基

巯基化PEG化学试剂叠氮-聚乙二醇-巯基&#xff0c;其英文名为Azide-PEG-Thiol&#xff08;N3-PEG-SH&#xff09;&#xff0c;它所属分类为Azide PEG Thiol PEG。 此peg试剂的分子量均可定制&#xff0c;有&#xff1a;5k N3-PEG-SH、20k 叠氮-聚乙二醇-巯基、10k N3-PEG-SH、…

[11]重绘与回流

在看今天的分享之前&#xff0c;希望大家先关注一下&#xff0c;因为你可以免费获取一枚前端路上的陪跑师。 什么是回流 回流&#xff1a;英文是reflow 当render tree中的一部分(或全部)&#xff0c;因为元素的规模尺寸、布局、隐藏等改变 而需要重新构建&#xff0c;这就是回流…

基于web在线餐饮网站的设计与实现——蛋糕甜品店铺(HTML+CSS+JavaScript)

&#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计&#x1f469;‍&#x1f393;,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等&#xff0c;用的最多的还是DW&#xff0c;当然不同软件写出的…

你的新进程是如何被内核调度执行到的?(上)

所谓的运行队列到底长什么样子、新进程是如何被加入进来的、调度是如何选择一个新进程的、新进程又如何被切换到 CPU 上运行的&#xff0c;这些细节咱们都没提到。今天就来展开看看这些进程运行背后的原理。 通过今天的文章&#xff0c;你将对以下两个问题有个更深入的理解。 …

mysql高手进阶优化篇

​MySql理论 逻辑架构 连接层-->服务层-->引擎层-->存储层 存储引擎 查看方式 1.查看mysql现在提供的搜索引擎--->show engines 2.查看mysql当前默认存储引擎show variables like storageenginestorage_enginestorageengine 存储引擎对比 MyISAM: BTree叶节…

Vue快速入门二:Vue绑定事件、Vue中的this指向、增加class选择器、动态创建标签

Vue定义点击事件&#xff1a; <body><div id"box"><button click"handleChange()">change</button></div><script>var vm new Vue({el:"#box",//定义方法methods:{//handleChange:function(){}//简写法&a…

数据结构:单链表

用&#xff08;带头节点&#xff09;单链表完成图书统计。节点结构包括书籍编号&#xff0c;书籍名以及对应作者。功能包括增加&#xff08;尾插法和指定位置插入法&#xff09;、删除、修改、查看。 一、定义节点结构 每一个节点都包括这些变量&#xff0c;构造器复杂将传入的…

去除 Zotero + Obsidian 复制粘贴参考文献表时的多余空行(ctrl+shift+C)

前言 最近在用 Zotero 做文献管理&#xff0c;用 Obsidian 记笔记。但是使用的时候&#xff0c;有一个问题不大&#xff0c;但是有时候很烦人的情况&#xff1a;粘贴参考文献格式。在粘贴的时候总会莫名多出来几个空行&#xff0c;需要手动删除。 举个例子&#xff1a; 下面…

蚂蚁链牵头两项区块链国际标准在ITU成功立项

近日&#xff0c;国际电信联盟第十六研究组&#xff08;简称ITU-T SG16&#xff09;召开全体会议。会上&#xff0c;由蚂蚁链牵头的两项区块链国际标准获得立项通过。包括&#xff1a; ITU-T H.DLT-SCLMR “Smart contract lifecycle management requirements for distributed…

Arduino开发实例-PS/2键盘驱动

PS/2键盘驱动 1、PS/2通信协议介绍 物理 PS/2 端口是 6 针 DIN 连接器。 连接器引脚如下所示: Vcc/Ground 为设备提供电源 (5V),而 Data 和 Clock 是两条集电极开路线,带有上拉电阻到 Vcc。 电阻值并不重要(1 – 10 KOhm),最小值给出最短的上升时间,而较大的值允许更少…

AES简写

一、简介引入 密码学中的高级加密标准&#xff08;Advanced Encryption Standard&#xff0c;AES&#xff09;&#xff0c;又称Rijndael加密法&#xff0c;是美国联邦政府采用的一种区块加密标准。 这个标准用来替代原先的DES&#xff08;Data Encryption Standard&#xff0…

kingdee漏洞存在多个安全漏洞(通用管理账号+获得数据库密码+远程代码执行)

kingdee漏洞详情,金蝶eas存在通用管理账号获得数据库密码漏洞&#xff0c;金蝶apusic存在远程代码执行漏洞。 下面的信息希望乌云在确认漏洞予以模糊处理&#xff0c;以免对厂商和用户产生不良影响&#xff1a; 漏洞一、金蝶eas系统存在一个默认的管理员账号admr&#xff0c;密…

vBox+K8s坑记录

vBoxKubernetesFlannelDashboard一、VBox虚拟机IP地址重复问题1、通过导入ova系统镜像2、复制同一个镜像导致IP重复&#xff0c;无法拉取镜像复制多个系统镜像后&#xff0c;修改IP地址curl无效&#xff08;注同时启动两个及以上&#xff0c;会出现该问题&#xff09;导致拉取镜…

JVM堆内存泄露分析

一、背景 公司有一个中间的系统A可以对接多个后端业务系统B&#xff0c;一个业务系统以一个Namespace代表, Namespace中包含多个FrameChannel(用holder保存)&#xff0c;表示A连接到业务系统B各服务实例的连接&#xff1b;A与B通过GRPC通信。 二、现象 测试使用一台服务实例A&…

立创EDA仿真入门2 实战全桥整流

立创EDA仿真入门2 实战全桥整流一、全桥整流原理二、操作步骤1. 在立创EDA新建仿真项目和原理图2. 绘制原理图电阻的作用函数发生器的设置3. 点仿真4. 使用电容代替电阻5. 加上负载一、全桥整流原理 全桥整流也称整流桥堆&#xff0c;使用4个或更多相同的二极管组成整流电路&am…

四、MySQL 提权方式

1 UDF 提权 secure_file_priv 是用来限制 load dumpfile、into outfile、load_file() 函数在哪个目录下拥有上传或者读取文件的权限 show global variables like secure%; 修改 my.cnf 文件,在 [mysqld] 块下,如果没有 secure_file_priv 则新增 指定目录:secure_file_pri…

[附源码]java毕业设计商城管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Oracle 11g安装使用、备份恢复并与SpringBoot集成

背景 最近接手了一个祖传项目&#xff0c;一个十几年前的 .Net 客户端项目&#xff0c;近期需要修改一个小功能&#xff0c;项目用到了 Oracle 数据库&#xff0c;以下是我在 Windows 7 旗舰版虚拟机上安装使用 Oracle 11g 的记录。 在 Windows 7 虚拟机上安装了 Oracle 服务…

招聘小程序开发功能点_分享招聘小程序的优势

招聘小程序的主要用户就是企业招聘端和找工作人员的用户端,下面从这两个端来对招聘小程序开发的功能进行介绍。 企业端功能 1、岗位发布:企业根据自身岗位需求,在招聘app上发布招聘岗位及所需技能。 2.简历筛选:根据求职者提交的简历选择合适的简历,并对公开发布的简历进行筛…