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

 

目录

 

一、后端部分

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;}@Overridepublic 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;@Overridepublic 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 {@Autowiredprivate 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 {@Overridepublic void addInterceptors(InterceptorRegistry registry) {HandlerInterceptor handlerInterceptor=new HandlerInterceptor() {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {boolean isGo=false;String url= request.getRequestURI();//获取当前请求的数据接口路径System.out.println("当前路径是"+url);//获取用户请求时传递的uidString 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;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}@Overridepublic 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.rhkb.cn/news/59446.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行人仿真仿而不真——基于Unity将外部仿真数据可视化

0 前言 Unity作为一款生态成熟、扩展性强、学习成本较低的三维引擎&#xff0c;近年来受到各领域研究者的青睐。具体到行人仿真领域&#xff0c;相较于传统的C/Python平台&#xff0c;Unity在效果呈现及数据交互方面具备无可比拟的优势&#xff0c;国外开发者基于Unity已经实现…

教你怎样用Python画了一棵圣诞树,快来学习

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 以下文章来源于IT入门 分享给大家一篇文章&#xff0c;教你怎样用Python画了一棵圣诞树&#xff0c;快来学习。 如何用Python画一个圣诞树呢&#xff1f; 最简单&…

分享10个Python绘制圣诞树的源码,拿来即用

大家好&#xff0c;我是丁小杰。 圣诞节就要到了&#xff0c;作为一个的“程序猿”&#xff0c;怎么能够少得了绘制圣诞树呢&#xff0c;今天就和大家分享 10 个圣诞树的绘制源码&#xff0c;拿来即用&#xff01; 搞笑版 height 5 stars 1 for i in range(height):print((…

Python代码画圣诞树--turtle绘图

效果图 代码如下 import turtle as t import random import pygame import threading import time import tkinter as tkt.screensize(bgblack) # 定义背景颜色&#xff0c;可以自己换颜色def loving_heart(r):l 2 * rt.left(45)t.forward(l)t.circle(r, 180)t.right(90)t.c…

教你用 python 画圣诞树

圣诞节快到了&#xff0c;教你用 python 画圣诞树&#xff0c;送给你女朋友&#xff0c;博主给了三个版本的圣诞树。 博主没有下载专门写 python 的 pycharm&#xff0c;用 VSCode 替代&#xff0c;因为 VSCode 也可以运行 python 代码。 还需要下载一个 python 运行环境&…

用python画圣诞树-使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例

今天为大家介绍几个Python"装逼”实例代码&#xff0c;python绘制樱花、玫瑰、圣诞树代码实例&#xff0c;主要使用了turtle库 Python绘制樱花代码实例 动态生成樱花 效果图&#xff08;这个是动态的&#xff09;&#xff1a; 实现代码 import turtle as T import ra…

【圣诞快乐】如何用代码画一颗圣诞树?

文章目录 一、前言二、创意角度三、java swing版 效果展示四、java swing版 实现步骤&代码五、springboot项目banner版 效果展示六、springboot项目banner版 实现步骤七、 linux shell界面打印版 效果展示八、 linux shell界面打印版 实现步骤 一、前言 一年一度的圣诞节来…

美美的圣诞树画出来-CoCube

2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ CSDN诚邀各位技术er分享关于圣诞节的各种技术创意&#xff0c;展现你与众不同的精彩&#xff01;参与本次投稿即可获得【话题达人】勋章【圣诞快乐】定制勋章&#xff08;1年1次&#xff0c;错过要等下一年喔&#…

圣诞树【Python版】小刘教你画圣诞树

平台准备&#xff1a; 首先安装Python及其编写平台&#xff1a; 此处小刘选择的是Python3.6版本以及PyCharm编写平台 其次安装Python所需的相关包“turtle”以及“random” Python相关包安装&#xff1a; 首先查看Python是否安装&#xff1a; 打开PyCharm在Terminal窗口输…

Python画圣诞树和烟花源代码

最近一直想让女朋友开心开心&#xff0c;眼看就到圣诞了&#xff0c;就想着来个不一样的&#xff0c;给她画个圣诞树玩一玩&#xff0c;也算是自己亲手做的&#xff0c;用了心思了。看了关于画圣诞树的很多博客&#xff0c;人才确实很多啊&#xff0c;鄙人不才&#xff0c;也加…

用python画圣诞树的代码

如何用python画一个圣诞树呢&#xff1f; 一、最简单的绘制圣诞树 代码也特别简单&#xff1a; # 最简单的绘制圣诞树height 5 # 树的高度 stars 1 # 树的雪花数&#xff0c;初始为1 for i in range(height): #…

【送给她的圣诞礼物】尝试用turtle画圣诞树

尝试用turtle画圣诞树 前言开发环境步骤一&#xff1a;加载bgm所念皆星河步骤二&#xff1a;窗口界面初始化步骤三&#xff1a;turtle初始化步骤四&#xff1a;画树的外轮廓步骤五&#xff1a;画雪花步骤六&#xff1a;画花朵步骤七&#xff1a;画五角星开源 前言 今天就是平安…

用 Python 画圣诞树的 N 种玩法

作者 | 写代码的明哥 来源 | Pyhton编程时光 马上就是圣诞节了&#xff0c;先提前祝大家圣诞快乐&#xff01; 今天来给大家分享一波如何使用 Python 来画一颗圣诞节树&#xff0c;包含多种版本&#xff0c;从平民版到豪华版&#xff0c;像极了一个程度员从入门到高级秃头程序员…

圣诞节到了,教大家用 Python 绘制几棵圣诞树~

大家好&#xff0c;我是大飞 今天是圣诞节&#xff0c;先在这里祝大家圣诞节快乐~~&#xff0c;用英语来表达就是 Merry Christmas ~~&#xff0c; 为了贴合这个氛围&#xff0c;今天分享五种用 Python 绘制圣诞树的方法&#xff0c;从基础到高级&#xff0c;效果也不断攀升分…

【圣诞来了】3分钟教你用java画一颗彩色圣诞树,送给别人作为圣诞礼物吧

⭐️写在前面 这里是温文艾尔の学习之路&#x1f44d;如果对你有帮助&#xff0c;给博主一个免费的点赞以示鼓励把QAQ&#x1f44b;博客主页&#x1f389; 温文艾尔の学习小屋⭐️更多文章&#x1f468;‍&#x1f393;请关注温文艾尔主页&#x1f345;文章发布日期&#xff1a…

如何用python画圣诞树(附圣诞树代码)

python圣诞树代码 1、简单的绘制圣诞树 新建tree1.py或者直接输入下面代码运行 #声明树的高度 height 5 #树的雪花数&#xff0c;初始为1 stars 1 #以数的高度作为循环次数 for i in range(height): print((’ ’ * (height - i)) (’*’ * stars)) stars 2 #输…

【AI金融】Can ChatGPT Forecast Stock Price Movements? Return Predictability and Large Language Models

titleChatGPT能够预测股票走势吗&#xff1f;回到可预测性与大预言模型出版时间2023年4月6日doiarXiv:2304.07619v3 [q-fin.ST]期刊arXiv类别Null关键词Statistical Finance (q-fin.ST); Computation and Language (cs.CL)文章链接https://arxiv.org/abs/2304.07619 ChatGPT可以…

AIGC—— 内容生产力革命的起点

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.AIGC 1.什么是AIGC? 2.AIGC有哪些优势与挑战 &#xff08;1&#xff0…

QQ、微信、QQ浏览器UserAgent

如果你开发过微信公众好或者手机站的话应该遇到过一些页面访问的时候会提示使用手机或者微信访问。 但是手机上面如何查看页面源码&#xff1f; 如何调试&#xff1f; 方法当然是很多的&#xff0c;下面提供一种方法&#xff1a; 使用Chrome配合UserAgent可查看微信页面。U…

【浏览器】浏览器安全

浏览器安全分为页面安全、系统安全、网络安全 页面安全 为了页面安全浏览器引入了最核心的安全策略&#xff1a;同源策略&#xff08;Same-origin policy&#xff09; 同源策略 同源指&#xff1a;URL的协议、域名和端口都相同。两个不同的源之间若想要相互访问资源或者操作…