SpringCould+Vue3-Element-Admin 登录接口,用户信息接口以及Token验证的实现【Taurus教育平台】

文章目录

  • 一.SpringCould+Vue3-Element-Admin 登录接口,用户信息接口以及Token验证的实现【Taurus教育平台】
    • 1.1 背景
    • 1.2 数据库
  • 二、登录接口及其Token实现
    • 2.1 前端
    • 2.2 后端
      • 2.2.1 控制层
      • 2.2.2 service层
      • 2.2.3 工具类:CreateJwt
      • 2.2.4 Dao-Mapper
  • 三、用户信息接口及其验证Token功能实现
    • 3.1 前端
    • 3.2 后端
      • 3.2.1 控制层
      • 3.2.3 service层
      • 3.2.3 工具类:CreateJwt
      • 3.2.4 Dao-Mapper

一.SpringCould+Vue3-Element-Admin 登录接口,用户信息接口以及Token验证的实现【Taurus教育平台】

1.1 背景

本项目为重构:行知在线综合教育平台。本项目更名为:Taurus教育平台

关键字:SpringBoot、SpringCould、Vue3、Uni-app

前端后台管理系统采用开源项目:Vue3-Element-Admin。

本文主要为了实现SpringCould+Vue3-Element-Admin 后台管理系统的登录接口,用户信息接口以及Token验证实现

1.2 数据库

image-20230417160848283

二、登录接口及其Token实现

2.1 前端

前端采用开源项目:Vue3-Element-Admin

以下均为对Vue3-Element-Admin的代码魔改。

登录页面如下:

image-20230417165812848

分析原始项目的请求接口返回值:

image-20230417170045064

请求负载:

image-20230417170114619

更改前端请求接口:

接口目录位置:Src->api->login.js

// 登录接口
export const Login = data => {return request({url: 'http://localhost:8001/user/login',// url: '/api/login',method: 'post',data,})
}

2.2 后端

2.2.1 控制层

后端接收到前端的传值:

后台登录:

@PostMapping("/user/login")
@ResponseBody  //返回给前端一个文本格式
public Message login(@RequestBody BackLoginUser user) {Message msg=new Message();System.out.println(user.getUsername());System.out.println(user.getPassword());try {if (StringUtils.isEmpty(user.getUsername())) {msg.setMessage("登录失败,用户名不能为空");msg.setStatus(400);return msg;}if (StringUtils.isEmpty(user.getPassword())) {msg.setMessage("登录失败,密码不能为空");msg.setStatus(400);return msg;}msg = sysUserService.doLogin(user);return msg;} catch (Exception ex) {ex.printStackTrace();}return null;
}

代码解释:

@RequestBody BackLoginUser user:前端过来的json字符串存储到user。

user分别有username、password。

if (StringUtils.isEmpty(user.getUsername()))和 if (StringUtils.isEmpty(user.getPassword())) 是为了排除登录传值俩个字段为空的情况。

如果正常的话就继续往下。

没问题的话就传入了service层继续逻辑操作(查询用户是否存在,是否账号密码正确)

@Autowired
SysUserService sysUserService;

如下:

msg = sysUserService.doLogin(user);
return msg;

2.2.2 service层

代码如下:

    public Message doLogin(BackLoginUser user) {User userx = new User();Message msg=new Message();userx = sysUserDao.LoginByname(user.getUsername());System.out.println(userx);if (userx==null){msg.setMessage("用户不存在,请注册!");msg.setStatus(405);return msg;}else {if (user.getUsername().equals(userx.getUsername())&& user.getPassword().equals(userx.getPassword()) ){String token = CreateJwt.getoken(userx);Map<String, String> map = new HashMap<>();map.put("token",token);msg.setData(map);msg.setMessage("登录成功");msg.setStatus(200);return msg;}else {msg.setMessage("登录失败,密码错误");msg.setStatus(405);return msg;}}}

代码解释:

前面俩行没有可说的。

userx = sysUserDao.LoginByname(user.getUsername()); 调用了Dao层执行数据查询操作。

第一个if是排除用户不存在的问题(用户账号输错)。

else里分为登录成功或者密码错误。

登录成功代表需要生成Token。

String token = CreateJwt.getoken(userx);

2.2.3 工具类:CreateJwt

getoken方法为:生成Token,根据时间,用户的id,用户的用户名,现在的时间,和过期时间。过程如下。

    private static final String key = "0123456789_0123456789_0123456789";public static String  getoken(User user) {// 设置过期时间,这里设置为1小时long expirationTime = System.currentTimeMillis() + 3600000;SecretKey secretKey = new SecretKeySpec(key.getBytes(), SignatureAlgorithm.HS256.getJcaName());String jwt = Jwts.builder().setId(user.getId()+"").setSubject(user.getUsername()).setIssuedAt(new Date()).setExpiration(new Date(expirationTime)) // 设置过期时间.signWith(secretKey).compact();return jwt;}

2.2.4 Dao-Mapper

Dao:

public User LoginByname(String username);

Mapper:

<select id="LoginByname" parameterType="String" resultType="User">select * from user where username = #{username};
</select>

三、用户信息接口及其验证Token功能实现

3.1 前端

获取登录用户信息:发起请求需要携带Token。发送给后端,后端需要验证Token才可返回值。

import axios from 'axios'export const GetUserinfo = () => {const token = localStorage.getItem('VEA-TOKEN');return axios({method: 'get',url: 'http://localhost:8001/api/userinfo',headers: {'Authorization': 'Bearer ' + token,}});
};

发送过后,我们分析传回的值。

image-20230417183532577

改动获取用户信息的data:data.data

原因:

我在对接后端接口之后无法实现用户的信息展示,排除后发现,我后端传来的值,如果想要取到data里的值,需要data.data。

// 获取用户信息async getUserinfo() {const { status, data } = await GetUserinfo()if (+status === 200) {this.userinfo = data.dataconsole.log("myurl:",data.data);return Promise.resolve(data)}},

实现效果:

image-20230417183920392

3.2 后端

3.2.1 控制层

用户信息

 @GetMapping("/api/userinfo")public Message getUserInfo(@RequestHeader("Authorization") String token,@RequestHeader("User-Agent") String userAgent) {Message msg=new Message();try{String[] parts = token.split("\\s+");String jwtToken = parts[1];System.out.println(jwtToken);String tokenValue = JsonPath.parse(jwtToken).read("$.token");System.out.println(tokenValue);msg = sysUserService.userinfo(tokenValue);return msg;} catch (Exception e) {return null;}

代码解释

@RequestHeader(“Authorization”) String token,:接受前端传值Token。

try里面的值是我取字符串里面Token值的代码。

sysUserService.userinfo是把Token传入service进行处理。

msg = sysUserService.userinfo(tokenValue);

3.2.3 service层

代码如下:

public Message userinfo(String token) {Message msg=new Message();Claims claims = CreateJwt.parseToken(token);User userx = new User();System.out.println("claims.getId():"+claims.getId());userx = sysUserDao.LoginById(claims.getId());System.out.println(userx);Map<String, String> map = new HashMap<>();map.put("id", String.valueOf(userx.getId()));map.put("name",userx.getName());
//        role: 0 admin  1 teacher  0 studentString role = "";if (userx.getRole()==0){role="admin";}if (userx.getRole()==1){role="teacher";}else {role="student";}map.put("role",role);map.put("avatar","https://s1.ax1x.com/2023/04/17/p9CjIr6.png");msg.setData(map);msg.setMessage("登录成功");msg.setStatus(200);return msg;}

userinfo主要实现了token的解析,和返回值。

写到这里,我发现这块还没有写完,应该判断一下token解析的结果,如果错误的话返回状态码500。

role是一个简单的判断赋值:role: 0 admin 1 teacher 0 student

使用一个HashMap,将需要的数据值直接压入,最后放到Data里传递给后端。

3.2.3 工具类:CreateJwt

public static Claims parseToken(String token) {System.out.println(token);try {SecretKey secretKey = new SecretKeySpec(key.getBytes(), SignatureAlgorithm.HS256.getJcaName());Claims claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody();return claims;} catch (ExpiredJwtException e) {// Token已过期System.out.println("Token已过期");} catch (JwtException e) {// Token解析失败System.out.println("Token解析失败");}return null;
}

这块的代码是我用Chatgpt生成的,当然有我的小部分调试。Chatgpt写的相当不错。

这块主要是解析token的作用。

3.2.4 Dao-Mapper

Dao:

User LoginById(String id);

Mapper:

    <select id="LoginById"  parameterType="String" resultType="User">select * from user where id = #{id};</select>

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

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

相关文章

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析 0、前言text classificationemotions 数据集data visualization analysisdataset to dataframelabel analysistext length analysis text > tokenstokenize the whole dataset fine-tune transformersdistilbert…

Django通过nginx 部署(成功运行)

配置python版本和ssh启用root参考其它文章 完整项目路径 /root/projects/mysutra_pro 下级目录/root/projects/mysutra_pro/mysutra是源码目录 rootVM-12-2-debian:~/projects/mysutra_pro# ls db.sqlite3 manage.py ms_env mysutra rootVM-12-2-debian:~/projects/mysutr…

es Elasticsearch的增删改查(含数组操作)(类型,原理) - from chatgpt

父文章 算法中的特征的保存, es 和 mysql 和 odps hadoop hbase的区别_个人渣记录仅为自己搜索用的博客-CSDN博客 Elasticsearch如何做到数十亿数据查询毫秒级响应&#xff1f; - 知乎 ES系列之利用filter让你的查询效率飞起来_es filter_lucasma.eth的博客-CSDN博客 ES查询…

文心一言对比chatgpt

文章目录 一、 介绍二、 回复速度比较三、 写代码能力四、 做表格能力五、 写文案能力六、 解决数学问题能力七、 绘画能力八、 实时更新信息九、 总结 一、 介绍 文心一言对比chatgpt。 测试了上百个案例&#xff0c;挑选几个经典的案例。 二、 回复速度比较 百度文心耗时10…

CSDN chatGPT初体验

我的问题&#xff1a;用java实现一个B树 public class BTree {private int t;private Node root;private class Node {private int n;private boolean leaf;private int[] keys;private Node[] children;public Node(boolean leafNode) {this.n 0;this.leaf leafNode;this.ke…

chatgpt赋能python:Python岗位需求日渐增加

Python岗位需求日渐增加 Python编程语言在当前的IT行业中越来越受欢迎。其灵活性和易用性使得Python在各种领域中使用广泛&#xff0c;比如Web开发、数据科学、人工智能等。作为一名有10年Python编程经验的工程师&#xff0c;我认为Python是一种非常有前途的编程语言&#xff…

ChatGPT可能被滥用于网络犯罪

科技是一把双刃剑 ChatGPT一经发布&#xff0c;短时间内就成为了现象级的应用。其清晰明确的回答和丰富的知识&#xff0c;昭示着AI技术造福人类&#xff0c;彻底简化我们生活工作这一美好的未来愿景。对于解决各行各业的许多问题&#xff0c;ChatGPT也提供了另外一种思路&…

用ChatGPT构建网络设备表,并根据设备关系生成网络拓扑

构造一个数据表&#xff0c;存储包括交换机、路由器、防火墙、入侵检测、上网行为管理等设备的编号、序列号、IP、MAC、访问地址、用户名、密码、管理员、物理位置、上联设备ip等信息 下面是一个示例数据表&#xff1a; Device IDSerial NumberIPMACAccess URLUsernamePassword…

七大语言模型“偏见与毒性”的角逐,ChatGpt3.5综合表现优良

颠覆性的技术进步和人工智能的快速发展&#xff0c;催生了现如今LLM&#xff08;大型语言模型&#xff09;和AIGC&#xff08;AI生成内容&#xff09;的盛行。这些创新性的模型和算法不仅能够理解、生成和处理人类语言&#xff0c;还能够模拟智能思维和创造力&#xff0c;成为各…

阿里版ChatGPT已接入钉钉,张勇:未来所有业务都有大模型加持

机器之心报道 机器之心编辑部 阿里&#xff1a;大模型也是基础设施。 4 月 7 日下午&#xff0c;阿里云没有一点预告的突然宣布&#xff0c;自研类 ChatGPT 产品开启企业邀测&#xff0c;模型名为「通义千问」。 虽然是非常小范围的测试&#xff0c;但邀测消息刚放出&#xff…

阿里巴巴开源Chat2DB v1.0.11 初体验

阿里巴巴开源Chat2DB v1.0.11 初体验 前言什么是Chat2DB下载安装安装配置Chat2DB初体验配置数据源准备测试数据认识几个功能菜单开始测试自然语言转SQLSQL解释SQL优化 使用总结后续功能结语 前言 作为一名阿里巴巴开源项目的拥护者&#xff0c;从Chat2DB开源至今都有关注这个开…

估值 2 个月从 11 亿美元降到 3 亿美元,投资人清仓跑路,国产大模型创业遇冷...

图片来源&#xff1a;由无界 AI生成 创业未半&#xff0c;而中道崩殂。 6 月 29 日&#xff0c;美团发布公告以 20.65 亿元全资收购光年之外全部权益&#xff0c;距离光年之外正式营业刚过去 84 天。 这是目前中国大模型创业领域最大的收购案&#xff0c;光年之外也在 4 个月时…

英伟达帝国的一道裂缝

2012年&#xff0c;AI圈发生了两件大事&#xff0c;按时间顺序&#xff0c;第一件是谷歌组团已久的Google Brain发布“出道作”——一个能够识别猫的深度学习网络“谷歌猫”&#xff0c;74.8%的识别准确率&#xff0c;比知名识别图像大赛ImageNet前一年获胜算法的74%还要高出0.…

也谈“前端已死”

一、一些迹象 逛社区&#xff0c;偶然看到了这张图片&#xff1a; 嗯……我眉头一皱&#xff0c;久久不语&#xff0c;心想&#xff0c;有这么夸张吗&#xff0c;假的吧&#xff1f; 突然想到&#xff0c;最近我在社区发了个前端招聘的信息&#xff0c;结果简历漫天纷飞&…

写文、画图、替人直播,小巨头混战AIGC

文&#xff5c;光锥智能&#xff0c;作者&#xff5c;黄小艺、郝鑫&#xff0c;编辑&#xff5c;刘雨琦 大模型的春风&#xff0c;吹乱了内容平台们的心。 作为“被革命”的第一梯队&#xff0c;内容平台们跃跃欲试&#xff0c;欲抢占时间窗口。 5月6日&#xff0c;小红书被曝…

AI来势汹汹,这份「生存计划」请查收!

AIGC即人工智能生产内容&#xff0c;最近可太火了&#xff0c;但是火了这么久&#xff0c;有些人都没明白到底为什么火&#xff1f;甚至不明所以觉得“AI替代XX”&#xff0c;小编认为没必要焦虑&#xff0c;一起来看一下吧。 AI工具们一日千张图、3小时写一本书、2分钟构建一个…

“前端已死”

一、一些迹象 逛社区&#xff0c;偶然看到了这张图片&#xff1a; 嗯……我眉头一皱&#xff0c;久久不语&#xff0c;心想&#xff0c;有这么夸张吗&#xff0c;假的吧&#xff1f; 突然想到&#xff0c;最近我在社区发了个前端招聘的信息&#xff0c;结果简历漫天纷飞&…

爆肝一晚上,我总结了 2023 年程序员必学的 Prompt Engineering 高杠杆技术!

前言 大家好&#xff0c;我是「周三不Coding」。 众所周知&#xff0c;程序员不能失去 ChatGPT&#xff0c;就像西方不能失去耶路撒冷。 ChatGPT 的爆火也使得 Prompt Engineering 这门技术为众人熟知。 短期来看&#xff0c;Prompt Engineering 是一门高杠杆技术&#xff…

chat GPT 能给普通人带来什么机会?

最近全网爆火的chat GPT 相信大家都有点了解&#xff0c;今天给大家一些参考&#xff1a;其实23年年初我就被一个朋友推荐了ChatGPT&#xff0c;当时他说让我体验下&#xff0c;说实话之前也被不少&#xff08;假&#xff0c;或者半成品&#xff09;AI技术糊弄过&#xff0c;也…

吹上天的AIGC,就业情况到底如何

猎聘大数据研究院重磅发布《AIGC就业趋势大数据报告2023》&#xff0c;招聘平均年薪已达40万&#xff0c;博士需求量同比增长超100%。 不用赘述&#xff0c;大家都知道&#xff0c;最近半年ChatGPT是有多么火爆。 随着ChatGPT的全球爆火&#xff0c;AIGC也已成功从科技领域破…