2026/5/21 15:53:54
网站建设
项目流程
英文企业网站建设,资料库网站开发报价,湖南省建设厅纪检组长,wordpress wiki 模版文章目录
系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架SSM前端框架vueSSM框架详细介绍系统测试微信小程序介绍 四、代码参考 源码获取 目的 摘要#xff1a;传统家教预约模式存在信息不对称、沟通效率低等问题。本文设计并实现基于Java SS…文章目录系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈后端框架SSM前端框架vueSSM框架详细介绍系统测试微信小程序介绍四、代码参考源码获取目的摘要传统家教预约模式存在信息不对称、沟通效率低等问题。本文设计并实现基于Java SSM框架与微信小程序的家教预约系统。系统采用三层架构前端以微信小程序为载体为用户提供便捷的预约入口界面简洁易操作后端运用SSM框架整合业务逻辑保障系统稳定运行MySQL数据库负责数据存储与管理。用户可在小程序上发布家教需求、浏览家教信息并预约家教也能发布个人资料、接收预约。系统具备智能匹配功能根据用户需求与家教信息进行精准推荐。同时设有评价反馈机制提升服务质量。经测试该系统有效解决了传统预约的痛点实现了家教供需双方的高效对接为家教市场提供了数字化、智能化的服务平台具有良好的应用前景与发展潜力。前言博主介绍✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌精彩专栏 推荐订阅全网最全的Java python 小程序 php uniapp项目列表-CSDN博客文末获取源码数据库感兴趣的可以先收藏起来还有大家在毕设选题项目以及论文编写等相关问题都可以给我留言咨询希望帮助更多的人一、详细视频演示文章底部获取博主联系方式二、项目部分实现截图三、技术栈后端框架SSM提高开发效率通过整合 Spring、Spring MVC 和 MyBatis开发者可以充分利用各个框架的优势避免重复开发快速搭建企业级应用。例如Spring 提供的依赖注入和事务管理等功能Spring MVC 的 Web 层处理能力以及 MyBatis 的数据库访问便捷性使得开发过程更加高效。 易于维护和扩展SSM 框架的分层架构使得代码结构清晰各层之间职责明确便于后期的维护和扩展。当项目需求发生变化时只需要在相应的层进行修改不会影响到其他层的代码。例如如果需要更换数据库只需修改 MyBatis 的配置文件和 SQL 映射语句而不会影响到业务逻辑层和 Web 层的代码。 提升性能MyBatis 的缓存机制、Spring 的优化配置以及 Spring MVC 的高效请求处理共同提升了整个应用的性能。合理使用这些特性可以减少数据库访问次数、提高资源利用率从而提升应用的响应速度和吞吐量。 SSM 框架在 Java Web 开发中具有重要地位它为开发者提供了一个高效、稳定、易于维护的开发框架广泛应用于各种企业级应用的开发中。前端框架VueVue.js的核心是虚拟DOM技术。虚拟DOM是一个内存中的数据结构它可以帮助Vue.js实现高效的DOM操作它采用了响应式数据绑定、虚拟DOM、组件化等现代化技术为开发者提供了一种灵活、高效、易于维护的开发模式当数据发生变化时UI也会自动更新这样就使得开发者可以更加专注于数据处理而不是手动更新UI这就是Vue体现出来的简洁灵活高效。SSM框架详细介绍Spring核心功能与特点Spring 框架为 Java 应用程序提供了全面的基础设施支持其核心容器负责管理对象的创建、配置和生命周期实现了控制反转IoC和依赖注入DI使得组件之间的耦合度降低代码更易于维护和测试。例如在一个 Web 应用中通过 Spring 容器管理数据库连接池对象开发者只需关注业务逻辑无需手动管理连接池的创建和销毁。 在项目中的作用在 SSM 框架中Spring 作为基础框架整合了其他框架提供了统一的配置管理和面向切面编程AOP等功能为整个项目搭建了坚实的基础架构使得项目结构更加清晰、灵活。Spring MVC核心功能与特点Spring MVC 是基于 MVC 设计模式的 Web 框架它将 Web 应用程序分为模型Model、视图View和控制器Controller三个部分实现了 Web 层的解耦。前端控制器DispatcherServlet负责接收请求根据配置将请求分发给相应的控制器处理处理结果通过视图解析器返回给用户。它支持多种视图技术如 JSP、Thymeleaf 等并且提供了数据绑定、表单验证等功能方便了 Web 应用的开发。 在项目中的作用在 SSM 框架中Spring MVC 主要负责处理 Web 层的请求和响应实现了用户界面与业务逻辑的分离提高了 Web 应用的开发效率和可维护性。例如用户在浏览器中输入 URL 请求一个页面Spring MVC 负责接收请求调用相应的业务逻辑处理最后将处理结果以合适的视图呈现给用户。MyBatis核心功能与特点MyBatis 是一个优秀的持久层框架它提供了灵活的 SQL 映射方式开发者可以通过编写 SQL 语句或使用注解来实现数据库操作。MyBatis 将 Java 对象与数据库表之间的映射关系进行了配置使得数据的持久化操作更加简单高效。它支持动态 SQL、缓存机制等功能能够有效地提高数据库访问性能。例如在查询数据库时可以根据不同的条件动态生成 SQL 语句提高查询的灵活性。 在项目中的作用在 SSM 框架中MyBatis 负责与数据库进行交互完成数据的持久化操作如数据的增删改查等。它提供了一种简单、高效的方式来操作数据库使得开发者能够专注于 SQL 语句的编写和业务逻辑的实现提高了数据访问层的开发效率和代码质量。系统测试从多个角度进行测试找到系统中存在的问题是本系统首要的测试目的通过功能测试寻找出系统缺陷并改正确保系统没有缺陷。在测试过程中证明系统满足客户需求发现问题和不足及时改正。测试完成之后得出测试结论。系统测试目的在管理系统的开发周期中系统测试是必不可少且考验耐心的过程。其重要性在于它是保证系统质量和牢靠性的最后一道关也是整个系统开发过程的最后一次检查。系统测试主要是为了避免用户在使用时发生问题增强用户体验感为了不影响用户的使用我们需要从多角度、多思路去考虑系统可能遇到的问题通过不同的模拟场景来发现缺陷并解决问题。在测试的过程中也可以了解到该系统的质量情况系统功能是否健全系统逻辑是否顺畅。一个合格的系统测试过程完成后将大大提升系统质量和使用感。测试的目标是验证系统是否符合需求规格说明书的定义并找出与需求规格说明书不符合或与之冲突的内容。测试过程中一定站在用户的角度考虑问题避免一些不切实际的场景浪费测试时间从而可能会引起问题导致预期结果与实际结果不符。系统功能测试对系统功能模块进行测试通过点击、输入边界值和必填项非必填项的验证等方法进行一系列的黑盒测试。通过编写测试用例根据测试用例中的内容进行测试最后得出测试结论。登录功能测试方案当需要登入该系统时通过账户密码等功能点进行验证用户在输入时需要输入与数据库内存储的数据匹配的内容当其中某项输入错误时系统将提示输入错误。此界面对角色权限也有相应的校验当用户角色的帐号选择管理员角色登录时也会报错。登录功能测试用例如下表所示。输入数据预期结果实际结果结果分析用户名guanliyuan 密码123456 验证码正确输入登入系统成功登入系统和估算结果一样用户名guanliyuan 密码111111 验证码正确输入密码错误密码错误请重新输入密码和估算结果一样用户名guanliyuan 密码123456 验证码错误输入验证码错误验证码信息错误和估算结果一样用户名空 密码123456 验证码正确输入用户名必填请输入用户名和估算结果一样用户名guanliyuan 密码空 验证码正确输入密码错误密码错误请重新输入密码和估算结果一样用户管理功能测试方案用户管理主要有添加、编辑、删除、查找用户功能。添加用户时必填项不填检验系统是否有非空检验添加已有的用户信息检验是否提示用户名已被使用删除用户信息系统将检验是否进行此操作更改用户信息更改用户信息后页面是否可以展示出来。用户管理测试用例如下表所示。输入数据预期结果实际结果结果分析填入用户基本信息添加成功在用户列表中显示该用户出现在在列表中和估算结果一样修改用户信息编辑成功修改信息成功被修改用户信息被修改和估算结果一样选中删除用户系统询问是否删除用户确认后用户被删除验证码信息错误系统询问是否删除用户确认后查找不到用户信息和估算结果一样添加用户时不填用户名提示用户名不能为空提示用户名不能为空和估算结果一样填入已有用户名添加失败提示用户名重复添加失败提示用户名重复和估算结果一样系统测试结论本系统主要使用黑盒测试通过模拟用户使用系统实现各个功能编写测试用例并进行测试。以确保系统流程的正确性。系统测试必不可少可以使系统更加完善该系统的可使用性也会更高。测试该系统主要为了验证系统的功能模块是否满足我们最初的设计理念验证各个功能模块逻辑是否正确此系统不需要过于复杂的逻辑处理以便于使用者操作。测试的最终目的也是围绕着用户使用展开。测试过程中所有场景都应符合用户需求不可偏离需求目标遇到问题时要站在用户的角度进行思考。经过一系列的测试过程后得到最终的测试结果从测试结果可以看出实现的系统在功能和性能方面满足设计要求。微信小程序介绍小程序简介小程序是一种连接用户与服务的方式它能在微信内被便捷地获取和传播具有出色的使用体验。不需要下载安装用户通过搜一搜或扫一扫就可以打开使用使用完后退出即可。小程序是基于微信的开发平台属于微信内部。发展史微信中的 WebView 逐渐成为移动 Web 的一个入口时微信就有相关的 JS API 出现了也就是说微信小程序开发中会用到javascript。2015年初微信发布了一整套网页开发工具包称之为 JS-SDK开放了拍摄、录音、语音识别、二维码、地图、支付、分享、卡券等几十个API供web开发者开发使用但是它也有很多不足例如白屏等问题为解决这类问题于是诞生了小程序。小程序的优点1.快速的加载2.更强大的能力3.原生的体验4.易用且安全的微信数据开放5.高效和简单的开发小程序与普通网页开发的区别小程序的主要开发语言是 JavaScript 小程序的开发同普通网页开发有很大的相似性。对于前端开发者而言从网页开发迁移到小程序的开发成本并不高但是二者还是有区别的其主要区别如下1.网页开发中渲染线程和脚本线程是互斥的这使得长时间的脚本运行可能会导致页面失去响应而在小程序中二者是分开的分别运行在不同的线程中不会失去响应。2.网页开发中可以使用各种浏览器暴露DOM并对其进行操作而在小程序中逻辑层和渲染层是分开的逻辑层运行在 JSCore 中并没有浏览器对象因此小程序中没有DOM和BOM的操作。3.JSCore 的环境同 NodeJS 环境也不相同所以一些 NPM 的包在小程序中也是无法运行的。4.网页开发需要面临各种各样的浏览器环境而小程序只需面临两大系统iOS和Android及辅助开发者工具。5.网页开发中只需要使用到浏览器并搭配一些辅助工具或者编辑器即可小程序的开发则有所不同需要经过申请小程序帐号、安装小程序开发者工具、配置项目等才可以。申请账号想要开发一款小程序首先需要申请一个小程序账号通过这个账号就可以管理自己的小程序其步骤如下1.打开官网https://mp.weixin.qq.com/进入微信公众平台点立即注册选择小程序2.在小程序注册页面根据指引填写相关资料并注册。3.到注册邮箱查阅邮件点击邮件中的链接地址进行信息登记并继续后确认4.重新进入网址https://mp.weixin.qq.com扫码登录进入小程序页面开发---开发管理---开发设置获取AppID(小程序ID相当于一个身份证后面会用到这里需要知道自己的AppID即可)安装开发工具微信小程序有自己的开发工具当然你可以使用自己的编辑器编写代码获取完AppID后在当前页面进行下载开发者工具具体步骤如下1.单击开发----开发工具---开发者工具---下载---选择对应自己电脑系统版本下载应用2.将下载好的应用双击接受用户协议安装目录可自愿修改之后进行安装。3.通过以上两步就已经安装完微信开发工具了想要了解更多微信工具的使用可阅读官方文档https://developers.weixin.qq.com/miniprogram/dev/devtools/devtools.html第一个微信小程序安装完开发工具后可以使用它开发一个小demo先简单测试一下,其步骤如下1.在桌面找到新安装的微信开发者工具并双击。2.使用微信扫描弹出的二维码进入开发者工具界面首次打开需要扫码登陆。3.在小程序项目---小程序中点击加号填写项目配置AppID可使用自己注册小程序时的AppID也可选择测试号4.选择着默认模板其他配置默认即可最后勾选用户协议点击新建。5.此时在开发工具模拟器中会看到自己微信的头像和hello world,此时表明第一个微信小程序已经创建成功。小程序代码构成上面生成的demo项目文件目录机构如下一个基础的小程序由四种文件构成分别是1.json 后缀的 JSON 配置文件2.wxml 后缀的 WXML 模板文件3.wxss 后缀的 WXSS 样式文件4.js后缀的 JS 脚本逻辑文件下面是对上面文件的详细介绍.json文件此文件用于静态配置项目根目录下app.json文件是当前小程序的全局配置包括小程序的所有页面路径、界面表现、网络超时时间、底部 tab 等app.json基础配置如下json文件中不能添加注释这里为了方便说明以//开始的表示注释使用此配置信息时将注释删除即可{ pages:[//1.pages用于配置所有页面路径默认会进入第一个路径指定的页面。 pages/index/index,//当在这里配置完新页面保存后pages下会自动生成对应的页面文件只需修改自动生成的文件即可。 pages/logs/logs ], entryPagePath: pages/logs/logs,//2.entryPagePath配置小程序默认启动首页不配置此项默认会选择pages配置中的第一项。 window:{//3.window:配置小程序所有页面的顶部背景颜色文字颜色等。 navigationBarBackgroundColor: #ff0,//3-1设置顶部导航背景颜色支持十六进制颜色值。 navigationBarTitleText: 微信小程序测试,//3-2设置顶部导航标题文本。 navigationBarTextStyle:black,//3-3设置顶部导航标题字体颜色其值只能是black和white默认值。 navigationStyle:default,//3-4配置导航栏样式默认值defalult,还有一值custom导航栏标题及背景都会消失仅右上角胶囊按钮存在。 backgroundColor:#ffffff,//3-5配置窗口的背景色默认值#ffffff支持十六进制颜色值。 backgroundTextStyle:dark,//3-6配置下拉loading的样式仅支持 dark默认值和light。 backgroundColorTop:#666,//3-7设置顶部窗口的背景色仅iOS支持默认值#ffffff。 backgroundColorBottom:#555,//3-8设置底部窗口的背景色仅iOS支持默认值#ffffff。 enablePullDownRefresh:true,//3-9设置是否开启全局下拉刷新默认值为false。 onReachBottomDistance:50,//3-10设置当页面上拉距底部某个距离后触发事件单位为px,默认值50例如下拉加载更多数据。 pageOrientation:auto//3-11设置屏幕旋转时小程序是否跟随设备旋转横竖屏显示其值portrait默认值设备旋转时小程序不旋转、landscape设备旋转小程序旋转保持与视线不变、auto自动。 }, tabBar:{//4.tabBar:配置tab栏切换按钮。 color:#fff,//4-1设置tab按钮字体颜色其值为十六进制颜色值且为必须项。 selectedColor:#000,//4-2设置tab按钮被选中时字体颜色其值为十六进制颜色值且为必须项。 backgroundColor:#999,//4-3设置tab栏背景颜色其值为十六进制颜色值且为必须项。 borderStyle:black,//4-4设置tab栏边框颜色其值为black默认和white。 list:[//4-5设置tab按钮选项其值为一个每项都是对象的数组且为必须项数组元素的个数必须是[2,5]个不在范围内不显示。 { pagePath:pages/logs/logs,//4-5-1设置当前要跳转的页面路径。 text:登录,//4-5-2设置当前按钮文本。 iconPath:images/tabs/home.png,//4-5-3设置当前按钮点击前icon图标大小限制为40kb建议尺寸81px*81px不支持网络图片。 selectedIconPath:images/tabs/home-active.png//4-5-4设置当前按钮点击后icon图标大小限制为40kb建议尺寸81px*81px不支持网络图片。 }, { pagePath:pages/index/index, text:登录, iconPath:images/tabs/home.png, selectedIconPath:images/tabs/home-active.png } ], position:top,//4-6设置tab栏的位置其值bottom底部默认、top顶部。 custom:false//4-7自定义设置tabBar一般忽略此项配置其默认值为false,当值为true时需要自定义设计tabBar否则tabBar将失效其设计可阅读https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html。 }, networkTimeout:{//5.networkTimeout:设置请求超时时间。 request:60000,//5-1设置wx.request的超时时间默认值为60000单位值毫秒。 connectSocke:60000,//5-2设置wx.connectSocket的超时时间默认值为60000单位值毫秒。 uploadFile:60000,//5-3设置wx.uploadFile的超时时间默认值为60000单位值毫秒。 downloadFile:60000//5-4设置wx.downloadFile的超时时间默认值为60000单位值毫秒。 }, //debug:true,//6.debug:是否开启在开发工具控制台面板显示调试信息Page 的注册页面路由数据更新事件触发等便于开发者快速定位问题所在调试完建议关闭其默认值为false。 //functionalPages:true,//7.functionalPages是否启用插件功能默认false如要启用可阅读https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/functional-pages.html。 //subpackages:{},//8.subpackages:分包结构配置用于构建时打包成不同的分包按需加载如需配置请阅读https://developers.weixin.qq.com/miniprogram/dev/framework/subpackages.html。 //workers:string,//9.workers:设置处理多线程任务时worker代码放置目录如需配置请阅读https://developers.weixin.qq.com/miniprogram/dev/framework/workers.html。 //requiredBackgroundModes:string,//10.requiredBackgroundModes设置需要在后台使用的能力如需配置请阅读https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#requiredBackgroundModes //plugins:Object,//11.plugins:设置使用到的插件如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/using.html。 //preloadRule:Object,//12.preloadRule:设置分包预下载规则如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/framework/subpackages/preload.html。 resizable:true,//13.resizable:设置是否允许在PC上对窗口进行缩放及iPad是否支持屏幕旋转默认值为false。 //usingComponents:Object,//14.usingComponents:配置自定义组件。 //permission:Object,//15.permission:配置小程序接口权限相关设置如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#permission。 //sitemapLocation:String,//16.sitemapLocation:配置sitemap.json文件路径默认在app.json同级目录下。 style:v2,//17.style:当值为v2时表示启用新版的组件样式。 //useExtendedLib:Object,//18.useExtendedLib:配置引用的扩展库如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#useExtendedLib。 //entranceDeclare:Object,//19.entranceDeclare:配置微信消息用小程序打开如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/location-message.html。 //darkmode:String,//20.darkmode:配置小程序支持 DarkMode如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#darkmode。 //themeLocation:String,//21.themeLocation:配置theme.json 的路径如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#themeLocation。 //lazyCodeLoading:String,//22.lazyCodeLoading:配置自定义组件代码按需注入如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#lazyCodeLoading。 //singlePage:Object,//23.singlePage:配置单页模式相关配置如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#singlePage。 }app.json文件更详细配置文档推荐https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.htmlproject.config.json 对开发工具的配置使用这个配置后即使在更换电脑重新安装工具后将此项目在工具中打开依旧是自己熟悉的工具配置项。pages文件夹中json文件 pages文件夹中每个页面下的json文件是对当前页面的配置当前页面使用此json文件配置页面后当前页面可以忽略app.json文件的配置。.wxml文件此文件用于小程序骨架类似网页中的html文件此文件存在pages文件夹下的页面文件夹中也是由标签、属性等构成但是这里的标签和html中的标签有很大的不同如view classcontainertexthello/text/viewwxml文件和html文件不同之处1.标签名有所不同具体可阅读组件相关文档https://developers.weixin.qq.com/miniprogram/dev/component/2.小程序中可以实现数据绑定、列表渲染、条件渲染、模板等具体文档推荐https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/wxss样式wxss支持css大部分特性其文件为后缀.wxss的文件其不同之处1.新增rpx尺寸单位一个响应式的尺寸单位把所有设备屏幕尺寸都划分为750rpx,使用rpx可以适配不同屏幕尺寸。2.仅支持css基础选择器。js逻辑微信小程序中js逻辑代码和网页中js代码基本相似后面会详细介绍。四、代码参考IgnoreAuth PostMapping(value /login) public R login(String username, String password, String captcha, HttpServletRequest request) { UsersEntity user userService.selectOne(new EntityWrapperUsersEntity().eq(username, username)); if(usernull || !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 EntityWrapperTokenEntity().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; charsetutf-8); try { writer response.getWriter(); writer.print(JSONObject.toJSONString(R.error(401, 请先登录))); } finally { if(writer ! null){ writer.close(); } } // throw new EIException(请先登录, 401); return false; } }数据库参考-- ---------------------------- -- Table structure for token -- ---------------------------- DROP TABLE IF EXISTS token; CREATE TABLE token ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键, userid bigint(20) NOT NULL COMMENT 用户id, username varchar(100) NOT NULL COMMENT 用户名, tablename varchar(100) DEFAULT NULL COMMENT 表名, role varchar(100) DEFAULT NULL COMMENT 角色, token varchar(200) NOT NULL COMMENT 密码, addtime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 新增时间, expiratedtime timestamp NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 过期时间, PRIMARY KEY (id) USING BTREE ) ENGINEInnoDB AUTO_INCREMENT27 DEFAULT CHARSETutf8 ROW_FORMATCOMPACT COMMENTtoken表; -- ---------------------------- -- Records of token -- ---------------------------- INSERT INTO token VALUES (9, 23, cd01, xuesheng, 学生, al6svx5qkei1wljry5o1npswhdpqcpcg, 2023-02-23 21:46:45, 2023-03-15 14:01:36); INSERT INTO token VALUES (10, 11, xh01, xuesheng, 学生, fahmrd9bkhqy04sq0fzrl4h9m86cu6kx, 2023-02-27 18:33:52, 2023-03-17 18:27:42); INSERT INTO token VALUES (11, 17, ch01, xuesheng, 学生, u5km44scxvzuv5yumdah2lhva0gp4393, 2023-02-27 18:46:19, 2023-02-27 19:48:58); INSERT INTO token VALUES (12, 1, admin, users, 管理员, h1pqzsb9bldh93m92j9m2sljy9bt1wdh, 2023-02-27 19:37:01, 2023-03-17 18:23:02); INSERT INTO token VALUES (13, 21, xiaohao, shezhang, 社长, zdm7j8h1wnfe27pkxyiuzvxxy27ykl2a, 2023-02-27 19:38:07, 2023-03-17 18:25:20); INSERT INTO token VALUES (14, 27, djy01, xuesheng, 学生, g3teq4335pe21nwuwj2sqkrpqoabqomm, 2023-03-15 12:56:17, 2023-03-15 14:00:16); INSERT INTO token VALUES (15, 29, dajiyue, shezhang, 社长, 0vb1x9xn7riewlp5ddma5ro7lp4u8m9j, 2023-03-15 12:58:08, 2023-03-15 14:03:48);源码获取文章下方名片联系我即可~大家点赞、收藏、关注、评论啦 、查看获取联系方式精彩专栏推荐订阅全网最全的Java python 小程序 php uniapp项目列表