• 基于Java+SpringBoot+Vue+协同过滤算法的电影推荐系统(亮点:智能推荐、协同过滤算法、在线支付、视频观看)


    一、前言

    💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗
    👇🏻 精彩专栏 推荐订阅👇🏻
    2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐✅

    2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐✅

    Java精品实战案例《500套》

    微信小程序项目精品案例《500套》

    🌟文末获取源码+数据库🌟

    网上大部分的毕设套路如下:

    1. 在b站发毕设项目的演示视频,让你免费领取,你领取完发现代码不全或者数据库少表,根本跑不起来!如果要调试则收费300😅真的是恶心至极有没有!

    2. 某宝找人帮忙写,简单来说比第一种行为靠谱,但是很贵!说是可以免费修改其实修改基本排不上队,一改就是一星期,想快点?加钱,200加急!😅

    三、开发环境与技术

    3.1 MySQL数据库

    本课题研究研发的应用程序在数据操作过程中是难以预测的,而且常常产生变化。没有办法直接从word里写数据,这不但不安全,并且难以实现应用程序的功能。想要实现运用所需要的数据存放功能,就必定要选择专业的数据库存储软件。大部分,应用程序达到的功能并不太繁杂,市场中所有关系数据库手机软件都能实现。参照自己的思维构造及使用习惯性,MySQL能够支持中小型系统软件,不用Oracle、SQL Server 大中小型数据适用,适宜大家全面的数据库,而非其他问题,由于真正意义上的系统在线,是数据库网络服务器,网站服务器。

    3.2 Vue前端技术

    在动态网站盛行之时,Java作为一种高级编程语言,当然不会轻易放弃这一领域的生日蛋糕。Sun企业上线了Servlet做为导出动态网站的标准规范。因为当时程序猿不是很喜欢,但一开始挑选很少。java语言在之后的好多个月里出现,不顾及性能高效率,最少区别了写网页页面所需要的动态性编码块和静态代码块,大大提升了创作效率易读性。因而,许多Java软件工程师和入行的初级程序员都会选择java语言当作个人职业生涯发展前景。为保持Java语言在高级编程语言中的重要性,避免java再次抢占市场,Sun与Apache慈善基金会协作,开发了一种有关Java动态网站的技术规范,即vue技术性。vue在页面写作时吸取java语言中的所有优势,却也靠着Java语言 EE庞大环境能通过Java组件完成很多作用。这种组件能够直接引用到vue页面,使vue更强大和完善。确保了Java科技的竖向可持续发展观,最终在动态网站开发行业占有一席之地。别的java开发工作人员能够快速转移到vue开展开发,不顾及一些特殊组件或功能性的开发,自打动态性页面的开发来说,彻底完成了java流程和vue流程的基本无成本费变换,vue技术性就是这样发展趋势起来。

    3.3 Spring Boot框架

    从取名上能够得知这一框架设计初心:快速开启Spring运用。因而,Spring。 实质上,Boot应用程序是一个根据Spring框架的应用程序。这是Spring“协议书先于配置”理论的良好实践物质。可以帮助开发者迅速、更有效地搭建根据Spring生态系统中的应用程序。
    Spring Boot实现自动配置、发展依靠、Actuator、命令行界面(CLI) 是Spring Boot最主要的四个核心特点,在其中CLI是Spring Boot的能选特点尽管功能齐全,却也引入了一套非传统的开发模型,因此本系列文章只注重别的三个特点。如标题,本问题是本系列的第一部分,将为您开启Spring Boot大门,关键为您进一步分析启动过程及全自动配置完成基本原理。把握这一部分主要内容,了解一些Spring框架的基本知识,也会让你游刃有余。

    3.4 微信小程序

    微信小程序是一种轻量级的应用程序,可以在微信内部直接运行,无需下载安装,为用户提供快速便捷的服务和功能体验,涵盖了各种领域的应用,从社交、娱乐到商务和生活服务,为开发者提供了一个强大的平台,以低成本和高效率开发和发布小程序。

    四、功能设计

    4.1 主要功能描述

    在这里插入图片描述

    五、系统实现

    5.1 前端界面实现

    5.1.1 首页

    在这里插入图片描述

    5.1.2 付费电影

    付费电影会根据购买的电影类型来进行协同过滤!
    在这里插入图片描述

    在这里插入图片描述

    5.1.3 协同过滤算法的应用

    原始推荐如下:
    在这里插入图片描述

    集成协同过滤算法之后,电影的推荐会随着用户的喜欢程度进行自动排序,排名靠前的为用户点击次数、点赞次数等行为来控制!

    5.1.4 电影论坛

    在这里插入图片描述

    5.1.5 电影资讯

    在这里插入图片描述

    5.1.6 个人中心

    用户可以在此修改个人信息、头像等信息。

    在这里插入图片描述

    5.1.7 登录注册

    在这里插入图片描述

    注册界面如下:
    在这里插入图片描述

    5.2 后台管理实现

    5.2.1 登录界面

    在这里插入图片描述

    5.2.2 用户管理

    在这里插入图片描述

    5.2.3 管理员管理

    在这里插入图片描述

    5.2.4 免费电影管理

    管理员在免费电影管理界面中查看免费电影种类信息,免费电影描述信息,新增免费电影信息等。
    在这里插入图片描述

    5.2.5 付费电影管理

    管理员在付费电影管理界面中可以对界面中显示,可以对付费电影信息的付费电影状态进行查看,可以添加新的付费电影信息等。

    在这里插入图片描述

    在这里插入图片描述

    5.2.6 其他管理

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    六、数据库设计参考

    -- MySQL dump 10.13  Distrib 5.7.31, for Linux (x86_64)
    --
    -- Host: localhost    Database: springbootm3ord
    -- ------------------------------------------------------
    -- Server version	5.7.31
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
    /*!40103 SET TIME_ZONE='+00:00' */;
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    
    --
    -- Current Database: `springbootm3ord`
    --
    
    /*!40000 DROP DATABASE IF EXISTS `springbootm3ord`*/;
    
    CREATE DATABASE /*!32312 IF NOT EXISTS*/ `springbootm3ord` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
    
    USE `springbootm3ord`;
    
    --
    -- Table structure for table `aboutus`
    --
    
    DROP TABLE IF EXISTS `aboutus`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `aboutus` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `title` varchar(200) NOT NULL COMMENT '标题',
      `subtitle` varchar(200) DEFAULT NULL COMMENT '副标题',
      `content` longtext NOT NULL COMMENT '内容',
      `picture1` longtext COMMENT '图片1',
      `picture2` longtext COMMENT '图片2',
      `picture3` longtext COMMENT '图片3',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='关于我们';
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    --
    -- Dumping data for table `aboutus`
    --
    
    LOCK TABLES `aboutus` WRITE;
    /*!40000 ALTER TABLE `aboutus` DISABLE KEYS */;
    INSERT INTO `aboutus` VALUES (1,'2023-03-05 09:51:25','关于我们','ABOUT US','不管你想要怎样的生活,你都要去努力争取,不多尝试一些事情怎么知道自己适合什么、不适合什么呢?\n你说你喜欢读书,让我给你列书单,你还问我哪里有那么多时间看书;你说自己梦想的职业是广告文案,问我如何成为一个文案,应该具备哪些素质;你说你计划晨跑,但总是因为学习、工作辛苦或者身体不舒服第二天起不了床;你说你一直梦想一个人去长途旅行,但是没钱,父母觉得危险。其实,我已经厌倦了你这样说说而已的把戏,我觉得就算我告诉你如何去做,你也不会照做,因为你根本什么都不做。','upload/aboutus_picture1.jpg','upload/aboutus_picture2.jpg','upload/aboutus_picture3.jpg');
    /*!40000 ALTER TABLE `aboutus` ENABLE KEYS */;
    UNLOCK TABLES;
    
    --
    -- Table structure for table `config`
    --
    
    DROP TABLE IF EXISTS `config`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `config` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `name` varchar(100) NOT NULL COMMENT '配置参数名称',
      `value` varchar(100) DEFAULT NULL COMMENT '配置参数值',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='配置文件';
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    --
    -- Dumping data for table `config`
    --
    
    LOCK TABLES `config` WRITE;
    /*!40000 ALTER TABLE `config` DISABLE KEYS */;
    INSERT INTO `config` VALUES (1,'picture1','upload/picture1.jpg'),(2,'picture2','upload/picture2.jpg'),(3,'picture3','upload/picture3.jpg');
    /*!40000 ALTER TABLE `config` ENABLE KEYS */;
    UNLOCK TABLES;
    
    --
    -- Table structure for table `discussjiaoyuan`
    --
    
    DROP TABLE IF EXISTS `discussjiaoyuan`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `discussjiaoyuan` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `refid` bigint(20) NOT NULL COMMENT '关联表id',
      `userid` bigint(20) NOT NULL COMMENT '用户id',
      `avatarurl` longtext COMMENT '头像',
      `nickname` varchar(200) DEFAULT NULL COMMENT '用户名',
      `content` longtext NOT NULL COMMENT '评论内容',
      `reply` longtext COMMENT '回复内容',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='教员评论表';
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    --
    -- Dumping data for table `discussjiaoyuan`
    --
    
    LOCK TABLES `discussjiaoyuan` WRITE;
    /*!40000 ALTER TABLE `discussjiaoyuan` DISABLE KEYS */;
    /*!40000 ALTER TABLE `discussjiaoyuan` ENABLE KEYS */;
    UNLOCK TABLES;
    
    --
    -- Table structure for table `discusszhaopinxinxi`
    --
    
    DROP TABLE IF EXISTS `discusszhaopinxinxi`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `discusszhaopinxinxi` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `refid` bigint(20) NOT NULL COMMENT '关联表id',
      `userid` bigint(20) NOT NULL COMMENT '用户id',
      `avatarurl` longtext COMMENT '头像',
      `nickname` varchar(200) DEFAULT NULL COMMENT '用户名',
      `content` longtext NOT NULL COMMENT '评论内容',
      `reply` longtext COMMENT '回复内容',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='招聘信息评论表';
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    --
    -- Dumping data for table `discusszhaopinxinxi`
    --
    
    LOCK TABLES `discusszhaopinxinxi` WRITE;
    /*!40000 ALTER TABLE `discusszhaopinxinxi` DISABLE KEYS */;
    /*!40000 ALTER TABLE `discusszhaopinxinxi` ENABLE KEYS */;
    UNLOCK TABLES;
    
    --
    -- Table structure for table `jiajiaoshenqing`
    --
    
    DROP TABLE IF EXISTS `jiajiaoshenqing`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `jiajiaoshenqing` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `shenqingbianhao` varchar(200) DEFAULT NULL COMMENT '申请编号',
      `gonghao` varchar(200) DEFAULT NULL COMMENT '工号',
      `jiaoshixingming` varchar(200) DEFAULT NULL COMMENT '教师姓名',
      `shoukezhuanye` varchar(200) DEFAULT NULL COMMENT '授课专业',
      `xueli` varchar(200) DEFAULT NULL COMMENT '学历',
      `jiajiaofeiyong` varchar(200) DEFAULT NULL COMMENT '家教费用',
      `shenqingriqi` date DEFAULT NULL COMMENT '申请日期',
      `shenqingneirong` longtext COMMENT '申请内容',
      `zhanghao` varchar(200) DEFAULT NULL COMMENT '账号',
      `xingming` varchar(200) DEFAULT NULL COMMENT '姓名',
      `shoujihaoma` varchar(200) DEFAULT NULL COMMENT '手机号码',
      `sfsh` varchar(200) DEFAULT '待审核' COMMENT '是否审核',
      `shhf` longtext COMMENT '审核回复',
      PRIMARY KEY (`id`),
      UNIQUE KEY `shenqingbianhao` (`shenqingbianhao`)
    ) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8 COMMENT='家教申请';
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    --
    -- Dumping data for table `jiajiaoshenqing`
    --
    
    LOCK TABLES `jiajiaoshenqing` WRITE;
    /*!40000 ALTER TABLE `jiajiaoshenqing` DISABLE KEYS */;
    INSERT INTO `jiajiaoshenqing` VALUES (51,'2023-03-05 09:51:24','1111111111','工号1','教师姓名1','授课专业1','学历1','家教费用1','2023-03-05','申请内容1','账号1','姓名1','手机号码1','是',''),(52,'2023-03-05 09:51:24','2222222222','工号2','教师姓名2','授课专业2','学历2','家教费用2','2023-03-05','申请内容2','账号2','姓名2','手机号码2','是',''),(53,'2023-03-05 09:51:24','3333333333','工号3','教师姓名3','授课专业3','学历3','家教费用3','2023-03-05','申请内容3','账号3','姓名3','手机号码3','是',''),(54,'2023-03-05 09:51:24','4444444444','工号4','教师姓名4','授课专业4','学历4','家教费用4','2023-03-05','申请内容4','账号4','姓名4','手机号码4','是',''),(55,'2023-03-05 09:51:24','5555555555','工号5','教师姓名5','授课专业5','学历5','家教费用5','2023-03-05','申请内容5','账号5','姓名5','手机号码5','是',''),(56,'2023-03-05 09:51:24','6666666666','工号6','教师姓名6','授课专业6','学历6','家教费用6','2023-03-05','申请内容6','账号6','姓名6','手机号码6','是',''),(57,'2023-03-05 09:51:24','7777777777','工号7','教师姓名7','授课专业7','学历7','家教费用7','2023-03-05','申请内容7','账号7','姓名7','手机号码7','是',''),(58,'2023-03-05 09:51:24','8888888888','工号8','教师姓名8','授课专业8','学历8','家教费用8','2023-03-05','申请内容8','账号8','姓名8','手机号码8','是','');
    /*!40000 ALTER TABLE `jiajiaoshenqing` ENABLE KEYS */;
    UNLOCK TABLES;
    
    --
    -- Table structure for table `jiaoyuan`
    --
    
    DROP TABLE IF EXISTS `jiaoyuan`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `jiaoyuan` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `gonghao` varchar(200) NOT NULL COMMENT '工号',
      `mima` varchar(200) NOT NULL COMMENT '密码',
      `jiaoshixingming` varchar(200) NOT NULL COMMENT '教师姓名',
      `xingbie` varchar(200) DEFAULT NULL COMMENT '性别',
      `youxiang` varchar(200) DEFAULT NULL COMMENT '邮箱',
      `lianxishouji` varchar(200) DEFAULT NULL COMMENT '联系手机',
      `shoukezhuanye` varchar(200) DEFAULT NULL COMMENT '授课专业',
      `xueli` varchar(200) DEFAULT NULL COMMENT '学历',
      `touxiang` longtext COMMENT '头像',
      `jiajiaofeiyong` varchar(200) DEFAULT NULL COMMENT '家教费用',
      `gerenjianjie` longtext COMMENT '个人简介',
      `rongyuxinxi` longtext COMMENT '荣誉信息',
      PRIMARY KEY (`id`),
      UNIQUE KEY `gonghao` (`gonghao`)
    ) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8 COMMENT='教员';
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    
    --
    -- Table structure for table `jiaoyuanfankui`
    --
    
    DROP TABLE IF EXISTS `jiaoyuanfankui`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `jiaoyuanfankui` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `fankuibianhao` varchar(200) DEFAULT NULL COMMENT '反馈编号',
      `fankuibiaoti` varchar(200) NOT NULL COMMENT '反馈标题',
      `fankuineirong` longtext COMMENT '反馈内容',
      `fankuishijian` datetime DEFAULT NULL COMMENT '反馈时间',
      `gonghao` varchar(200) DEFAULT NULL COMMENT '工号',
      `jiaoshixingming` varchar(200) DEFAULT NULL COMMENT '教师姓名',
      `shhf` longtext COMMENT '回复内容',
      PRIMARY KEY (`id`),
      UNIQUE KEY `fankuibianhao` (`fankuibianhao`)
    ) ENGINE=InnoDB AUTO_INCREMENT=119 DEFAULT CHARSET=utf8 COMMENT='教员反馈';
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    --
    -- Dumping data for table `jiaoyuanfankui`
    --
    
    LOCK TABLES `jiaoyuanfankui` WRITE;
    /*!40000 ALTER TABLE `jiaoyuanfankui` DISABLE KEYS */;
    INSERT INTO `jiaoyuanfankui` VALUES (111,'2023-03-05 09:51:25','1111111111','反馈标题1','反馈内容1','2023-03-05 17:51:25','工号1','教师姓名1',''),(112,'2023-03-05 09:51:25','2222222222','反馈标题2','反馈内容2','2023-03-05 17:51:25','工号2','教师姓名2',''),(113,'2023-03-05 09:51:25','3333333333','反馈标题3','反馈内容3','2023-03-05 17:51:25','工号3','教师姓名3',''),(114,'2023-03-05 09:51:25','4444444444','反馈标题4','反馈内容4','2023-03-05 17:51:25','工号4','教师姓名4',''),(115,'2023-03-05 09:51:25','5555555555','反馈标题5','反馈内容5','2023-03-05 17:51:25','工号5','教师姓名5',''),(116,'2023-03-05 09:51:25','6666666666','反馈标题6','反馈内容6','2023-03-05 17:51:25','工号6','教师姓名6',''),(117,'2023-03-05 09:51:25','7777777777','反馈标题7','反馈内容7','2023-03-05 17:51:25','工号7','教师姓名7',''),(118,'2023-03-05 09:51:25','8888888888','反馈标题8','反馈内容8','2023-03-05 17:51:25','工号8','教师姓名8','');
    /*!40000 ALTER TABLE `jiaoyuanfankui` ENABLE KEYS */;
    UNLOCK TABLES;
    
    --
    -- Table structure for table `ketijiangjie`
    --
    
    DROP TABLE IF EXISTS `ketijiangjie`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `ketijiangjie` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `gonghao` varchar(200) DEFAULT NULL COMMENT '工号',
      `jiaoshixingming` varchar(200) DEFAULT NULL COMMENT '教师姓名',
      `xueli` varchar(200) DEFAULT NULL COMMENT '学历',
      `yuyueshijian` varchar(200) NOT NULL COMMENT '预约时间',
      `ketimingcheng` varchar(200) DEFAULT NULL COMMENT '课题名称',
      `jiangjieshipin` longtext COMMENT '讲解视频',
      `dizhi` varchar(200) DEFAULT NULL COMMENT '地址',
      `zhanghao` varchar(200) DEFAULT NULL COMMENT '账号',
      `xingming` varchar(200) DEFAULT NULL COMMENT '姓名',
      `shoujihaoma` varchar(200) DEFAULT NULL COMMENT '手机号码',
      `neirong` longtext COMMENT '内容',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=79 DEFAULT CHARSET=utf8 COMMENT='课题讲解';
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    • 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
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262

    七、代码参考

    @IgnoreAuth
    @PostMapping(value = "/login")
    public R login(String username, String password, String captcha, HttpServletRequest request) {
       UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
       if(user==null || !user.getPassword().equals(password)) {
          return R.error("账号或密码不正确");
       }
       String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
       return R.ok().put("token", token);
    }
    
    	@Override
    	public String generateToken(Long userid,String username, String tableName, String role) {
    		TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
    		String token = CommonUtil.getRandomString(32);
    		Calendar cal = Calendar.getInstance();   
        	cal.setTime(new Date());   
        	cal.add(Calendar.HOUR_OF_DAY, 1);
    		if(tokenEntity!=null) {
    			tokenEntity.setToken(token);
    			tokenEntity.setExpiratedtime(cal.getTime());
    			this.updateById(tokenEntity);
    		} else {
    			this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));
    		}
    		return token;
    	}
    
    
    
    /**
     * 权限(Token)验证
     */
    @Component
    public class AuthorizationInterceptor implements HandlerInterceptor {
    
        public static final String LOGIN_TOKEN_KEY = "Token";
    
        @Autowired
        private TokenService tokenService;
        
    	@Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    		//支持跨域请求
            response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
            response.setHeader("Access-Control-Max-Age", "3600");
            response.setHeader("Access-Control-Allow-Credentials", "true");
            response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
            response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
    	// 跨域时会首先发送一个OPTIONS请求,这里我们给OPTIONS请求直接返回正常状态
    	if (request.getMethod().equals(RequestMethod.OPTIONS.name())) {
            	response.setStatus(HttpStatus.OK.value());
                return false;
            }
            
            IgnoreAuth annotation;
            if (handler instanceof HandlerMethod) {
                annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
            } else {
                return true;
            }
    
            //从header中获取token
            String token = request.getHeader(LOGIN_TOKEN_KEY);
            
            /**
             * 不需要验证权限的方法直接放过
             */
            if(annotation!=null) {
            	return true;
            }
            
            TokenEntity tokenEntity = null;
            if(StringUtils.isNotBlank(token)) {
            	tokenEntity = tokenService.getTokenEntity(token);
            }
            
            if(tokenEntity != null) {
            	request.getSession().setAttribute("userId", tokenEntity.getUserid());
            	request.getSession().setAttribute("role", tokenEntity.getRole());
            	request.getSession().setAttribute("tableName", tokenEntity.getTablename());
            	request.getSession().setAttribute("username", tokenEntity.getUsername());
            	return true;
            }
            
    		PrintWriter writer = null;
    		response.setCharacterEncoding("UTF-8");
    		response.setContentType("application/json; charset=utf-8");
    		try {
    		    writer = response.getWriter();
    		    writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));
    		} finally {
    		    if(writer != null){
    		        writer.close();
    		    }
    		}
    //				throw new EIException("请先登录", 401);
    		return false;
        }
    }
    
    
    • 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
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102

    八、源码获取

    文章下方名片联系我即可~
    大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
    精彩专栏推荐订阅:在下方专栏👇🏻
    Java精品实战案例《500套》

    微信小程序项目精品案例《500套》

  • 相关阅读:
    Java、后缀表示法
    D课堂 | DDoS、CC,网站被攻击怎么办?
    视觉神经网络的工作机理,计算机视觉和神经网络
    nodejs+vue+elementui在线日程管理系统php java python
    民法通则配套规定(二)
    gin框架39--重构 BasicAuth 中间件
    同时安装py2和py3-安装多版本python
    iwebsec靶场 反序列化关卡通关笔记1
    Github Copilot 值得购买吗?使用GitHub Copilot进行快速EDA的示例
    2.cuBLAS开发指南中文版--使用cuBLAS API
  • 原文地址:https://blog.csdn.net/qq_45714272/article/details/132920942