码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SpringBoot和Vue实现用户个人信息展示与保存与集成JWT——基于SpringBoot和Vue的后台管理系统项目系列博客(十四)


    系列文章目录

    1. 系统功能演示——基于SpringBoot和Vue的后台管理系统项目系列博客(一)
    2. Vue2安装并集成ElementUI——基于SpringBoot和Vue的后台管理系统项目系列博客(二)
    3. Vue2前端主体框架搭建——基于SpringBoot和Vue的后台管理系统项目系列博客(三)
    4. SpringBoot后端初始框架搭建——基于SpringBoot和Vue的后台管理系统项目系列博客(四)
    5. SpringBoot集成Mybatis——基于SpringBoot和Vue的后台管理系统项目系列博客(五)
    6. SpringBoot实现增删改查——基于SpringBoot和Vue的后台管理系统项目系列博客(六)
    7. SpringBoot实现分页查询——基于SpringBoot和Vue的后台管理系统项目系列博客(七)
    8. SpringBoot实现集成Mybatis-Plus和SwaggerUI——基于SpringBoot和Vue的后台管理系统项目系列博客(八)
    9. Vue实现增删改查——基于SpringBoot和Vue的后台管理系统项目系列博客(九)
    10. SpringBoot实现代码生成器——基于SpringBoot和Vue的后台管理系统项目系列博客(十)
    11. Vue使用路由——基于SpringBoot和Vue的后台管理系统项目系列博客(十一)
    12. SpringBoot和Vue实现导入导出——基于SpringBoot和Vue的后台管理系统项目系列博客(十二)
    13. SpringBoot和Vue实现用户登录注册与异常处理——基于SpringBoot和Vue的后台管理系统项目系列博客(十三)
    14. SpringBoot和Vue实现用户个人信息展示与保存与集成JWT——基于SpringBoot和Vue的后台管理系统项目系列博客(十四)
    15. SpringBoot和Vue实现文件上传与下载——基于SpringBoot和Vue的后台管理系统项目系列博客(十五)
    16. SpringBoot和Vue整合ECharts——基于SpringBoot和Vue的后台管理系统项目系列博客(十六)
    17. SpringBoot和Vue实现权限菜单功能——基于SpringBoot和Vue的后台管理系统项目系列博客(十七)
    18. SpringBoot实现1对1、1对多、多对多关联查询——基于SpringBoot和Vue的后台管理系统项目系列博客(十八)
    19. 用户前台页面设计与实现——基于SpringBoot和Vue的后台管理系统项目系列博客(十九)
    20. SpringBoot集成Redis实现缓存——基于SpringBoot和Vue的后台管理系统项目系列博客(二十)
    21. SpringBoot和Vue集成高德地图——基于SpringBoot和Vue的后台管理系统项目系列博客(二十一)
    22. SpringBoot和Vue集成视频播放组件——基于SpringBoot和Vue的后台管理系统项目系列博客(二十二)
    23. SpringBoot和Vue集成Markdown和多级评论——基于SpringBoot和Vue的后台管理系统项目系列博客(二十三)

    项目资源下载

    1. GitHub下载地址
    2. Gitee下载地址
    3. 项目MySql数据库文件

    文章目录

    • 系列文章目录
    • 项目资源下载
    • 前言
    • 一、用户个人信息展示与保存功能的实现
    • 二、SpringBoot集成JWT
    • 三、使用拦截器实现拦截功能
    • 四、权限不足提示功能
    • 五、在后台获取当前用户信息
    • 总结


    前言

      今天的主要内容包括:用户个人信息展示与保存功能的实现、SpringBoot集成JWT、使用拦截器实现拦截功能、权限不足提示功能、在后台获取当前用户信息等。废话不多说,下面就开始今天的学习!


    一、用户个人信息展示与保存功能的实现

    1. 首先在UserController.java中加入用户个人信息接口,用于查询用户个人信息
      在这里插入图片描述
    2. 然后在Vue项目的views文件夹中新建Person.vue
      在这里插入图片描述
    3. 在其中输入如下内容
    <template>
        <el-card style="width: 500px;">
            <el-form label-width="80px" size="small">
                <el-form-item label="用户名">
                    <el-input v-model="form.username" disabled autocomplete="off">el-input>
                el-form-item>
                <el-form-item label="昵称">
                    <el-input v-model="form.nickname" autocomplete="off">el-input>
                el-form-item>
                <el-form-item label="邮箱">
                    <el-input v-model="form.email" autocomplete="off">el-input>
                el-form-item>
                <el-form-item label="电话">
                    <el-input v-model="form.phone" autocomplete="off">el-input>
                el-form-item>
                <el-form-item label="地址">
                    <el-input v-model="form.address" autocomplete="off">el-input>
                el-form-item>
                <el-form-item>
                    <el-button type="primary" @click="save">保 存el-button>
                el-form-item>
            el-form>
        el-card>
    template>
    
    <script>
        export default {
            name: "Person",
            data() {
                return {
                    form: {},
                    user: localStorage.getItem("user") ? JSON.parse(localStorage.getItem("user")) : {}
                }
            },
            created() {
                this.request.get("/user/username/" + this.user.username).then(res => {
                    if (res.code == '200') {
                        this.form = res.data
                    }
                })
            },
            methods: {
                save() {
                    this.request.post("/user", this.form).then(res => {
                        if (res) {
                            this.$message.success("保存成功")
                        } else {
                            this.$message.error("保存失败")
                        }
                    })
                }
            }
        }
    script>
    
    <style scoped>
    
    style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    1. 最后在index.js中加入用户信息界面的路由,注意是作为Manage.vue的子路由
      在这里插入图片描述
    2. 最后测试一下,发现可以成功获取到当前用户的个人信息
      在这里插入图片描述

    二、SpringBoot集成JWT

    1. 在pom.xml中加入JWT的依赖
      在这里插入图片描述
    2. 在此目录下新建TokenUtils
      在这里插入图片描述
    3. 在TokenUtils中输入如下内容
      在这里插入图片描述
    4. 在UserDTO中加入token属性
      在这里插入图片描述
    5. 在UserServiceImple.java的登录函数中加入设置token的代码
      在这里插入图片描述
    6. 然后来到前端登录测试是否会生成token,发现已经成功生成token了
      在这里插入图片描述
    7. 在request.js中加入如下代码
      在这里插入图片描述
    8. 来到前端登录测试发现token已经成功绑定在请求头中
      在这里插入图片描述

    三、使用拦截器实现拦截功能

    1. 在此目录下新建JwtInterceptor.java
      在这里插入图片描述
    2. 在JwtInterceptor.java输入如下内容,要注意改成自己的包路径
    package com.ironmanjay.springboot.config.Interceptor;
    
    import cn.hutool.core.util.StrUtil;
    import com.auth0.jwt.JWT;
    import com.auth0.jwt.JWTVerifier;
    import com.auth0.jwt.algorithms.Algorithm;
    import com.auth0.jwt.exceptions.JWTDecodeException;
    import com.auth0.jwt.exceptions.JWTVerificationException;
    import com.ironmanjay.springboot.common.Constants;
    import com.ironmanjay.springboot.entity.User;
    import com.ironmanjay.springboot.exception.ServiceException;
    import com.ironmanjay.springboot.service.IUserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.method.HandlerMethod;
    import org.springframework.web.servlet.HandlerInterceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class JwtInterceptor implements HandlerInterceptor {
    
        @Autowired
        private IUserService userService;
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            String token = request.getHeader("token");
            // 如果不是映射到方法直接通过
            if (!(handler instanceof HandlerMethod)) {
                return true;
            }
            // 执行认证
            if (StrUtil.isBlank(token)) {
                throw new ServiceException(Constants.CODE_401, "无token,请重新登录");
            }
            // 获取 token 中的 userId
            String userId;
            try {
                userId = JWT.decode(token).getAudience().get(0);
            } catch (JWTDecodeException j) {
                throw new ServiceException(Constants.CODE_401, "token验证失败,请重新登录");
            }
            // 根据token中的userId查询数据库
            User user = userService.getById(userId);
            if (user == null) {
                throw new ServiceException(Constants.CODE_401, "用户不存在,请重新登录");
            }
            // 用户密码加签验证token
            JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
            try {
                jwtVerifier.verify(token); // 验证token
            } catch (JWTVerificationException e) {
                throw new ServiceException(Constants.CODE_401, "token验证失败,请重新登录");
            }
            return true;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    1. 在此目录下新建InterceptorConfig.java
      在这里插入图片描述
    2. 在InterceptorConfig.java中输入如下内容
      在这里插入图片描述
    3. 然后将Interceptor文件夹放到config文件夹中,如下图所示
      在这里插入图片描述
    4. 然后来到前端验证,在不登陆的情况下访问http://localhost:8080/user发现请求不到数据,也获取不到token,说明拦截器生效了
      在这里插入图片描述

    四、权限不足提示功能

    1. 首先在request.js中引入element-ui
      在这里插入图片描述
    2. 然后在request.js中加入如下代码
      在这里插入图片描述
    3. 然后来到前端测试,发现不登陆请求就会有提示了
      在这里插入图片描述

    五、在后台获取当前用户信息

    1. 在TokenUtils.java中加入如下代码
      在这里插入图片描述
      在这里插入图片描述
    2. 然后在UserController.java中加入如下代码,测试一下
      在这里插入图片描述
    3. 然后刷新前端页面,发现已经成功获取到当前登录的用户昵称
      在这里插入图片描述

    总结

      以上就是今天学习的全部内容了,下篇博文将给大家带来关于SpringBoot和Vue实现文件上传与下载的内容。明天见!

  • 相关阅读:
    黑马点评--Redis消息队列
    云原生场景下高可用架构的最佳实践
    二、HTTP协议基础
    linux sed命令:sed替换命令使用环境变量,且环境变量中有文件分隔符时,sed命令不work (unknown option to s)
    【SpringBoot笔记08】SpringBoot框架集成JDBC以及JdbcTemplate的使用
    用ARM进行汇编语言编程(4)带有分支的循环和条件指令执行
    如何从0开始搭建一个大语言模型并进一步训练微调?
    Spring Boot 中一行代码搞定Http请求!
    『SD』AI绘画,不会写提示词怎么办?
    Java23种设计模式系列——结构型模式之组合模式day4-3
  • 原文地址:https://blog.csdn.net/IronmanJay/article/details/127712276
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号