尚硅谷智慧校园 —— 2、登录功能实现

目录

1、登录的过程 

2、验证码功能实现

3、登录校验功能实现

3.1、在 service 及其实现类添加登录验证方法

3.2、controller 方法

4、登录校验后从登录页跳转到首页

4.1、完成 service 方法及其实现类

4.2、完成 controller 方法

5、解决登录后用户头像错误问题


1、登录的过程 

登录需要实现两个请求处理 

第一次需要处理表单的内容,校验登录信息

 第二次请求,会发送第一次请求的 token,需要处理这个 token,从而从登录页跳转到首页

2、验证码功能实现

在 SystemController 添加相应的方法

@RestController
@RequestMapping("/sms/system")
public class SystemController {@GetMapping("/getVerifiCodeImage")public void getVerifiCodeImage(HttpServletRequest request, HttpServletResponse response){// 获取图片BufferedImage verifiCodeImage = CreateVerifiCodeImage.getVerifiCodeImage();// 获取图片上的验证码char[] verifiCodeChars = CreateVerifiCodeImage.getVerifiCode();String verifiCode = new String(verifiCodeChars);// 将验证码文本放入session域,为下一次验证做准备HttpSession session = request.getSession();session.setAttribute("verifiCode", verifiCode);try {// 将验证码图片响应给浏览器ServletOutputStream outputStream = response.getOutputStream();// 将verifiCodeImage以JPEG的格式写到outputStream流中ImageIO.write(verifiCodeImage,"JPEG",outputStream);} catch (IOException e) {e.printStackTrace();}}}

3、登录校验功能实现

3.1、在 service 及其实现类添加登录验证方法

AdminService

public interface AdminService extends IService<Admin> {/*** 登录校验,查询提交的表单是否有此人* @param loginForm 登录页提交的表单* @return*/Admin login(LoginForm loginForm);}

AdminServiceImpl

@Service("adminServiceImpl")
@Transactional
public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin> implements AdminService {/*** 登录验证,查询提交的表单是否有此人* @param loginForm 登录页提交的表单* @return*/@Overridepublic Admin login(LoginForm loginForm) {QueryWrapper<Admin> queryWrapper = new QueryWrapper<>();queryWrapper.eq("name",loginForm.getUsername())// 注意将密码转为密文.eq("password", MD5.encrypt(loginForm.getPassword()));Admin admin = baseMapper.selectOne(queryWrapper);return admin;}}

StudentService

public interface StudentService extends IService<Student> {/*** 登录校验,查询提交的表单是否有此人* @param loginForm 登录页提交的表单* @return*/Student login(LoginForm loginForm);}

StudentServiceImpl

@Service("stuService")
@Transactional
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService {/*** 登录校验,查询提交的表单是否有此人* @param loginForm 登录页提交的表单* @return*/@Overridepublic Student login(LoginForm loginForm) {QueryWrapper<Student> queryWrapper = new QueryWrapper<>();queryWrapper.eq("name", loginForm.getUsername())// 注意将密码转为密文.eq("password", MD5.encrypt(loginForm.getPassword()));Student student = baseMapper.selectOne(queryWrapper);return student;}}

TeacherService

public interface TeacherService extends IService<Teacher> {/*** 登录校验,查询提交的表单是否有此人* @param loginForm 登录页提交的表单* @return*/Teacher login(LoginForm loginForm);}

TeacherServiceImpl

@Service("teaService")
@Transactional
public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, Teacher> implements TeacherService {/*** 登录校验,查询提交的表单是否有此人* @param loginForm 登录页提交的表单* @return*/@Overridepublic Teacher login(LoginForm loginForm) {QueryWrapper<Teacher> queryWrapper = new QueryWrapper<>();queryWrapper.eq("name", loginForm.getUsername())// 注意将密码转为密文.eq("password", MD5.encrypt(loginForm.getPassword()));Teacher teacher = baseMapper.selectOne(queryWrapper);return teacher;}}

3.2、controller 方法

SystemController 

@RestController
@RequestMapping("/sms/system")
public class SystemController {@Autowiredprivate AdminService adminService;@Autowiredprivate StudentService studentService;@Autowiredprivate TeacherService teacherService;/*** 验证码功能的实现** @param request* @param response*/@GetMapping("/getVerifiCodeImage")public void getVerifiCodeImage(HttpServletRequest request, HttpServletResponse response) {// 获取图片BufferedImage verifiCodeImage = CreateVerifiCodeImage.getVerifiCodeImage();// 获取图片上的验证码char[] verifiCodeChars = CreateVerifiCodeImage.getVerifiCode();String verifiCode = new String(verifiCodeChars);// 将验证码文本放入session域,为下一次验证做准备HttpSession session = request.getSession();session.setAttribute("verifiCode", verifiCode);try {// 将验证码图片响应给浏览器ServletOutputStream outputStream = response.getOutputStream();// 将verifiCodeImage以JPEG的格式写到outputStream流中ImageIO.write(verifiCodeImage, "JPEG", outputStream);} catch (IOException e) {e.printStackTrace();}}/*** 登录验证,查询提交的表单是否有效* @param loginForm 登录页提交的表单* @param request* @return*/@PostMapping("/login")public Result login(@RequestBody LoginForm loginForm, HttpServletRequest request) {// 验证码校验HttpSession session = request.getSession();String sessionVerifiCode = (String) session.getAttribute("verifiCode");String loginVerifiCode = loginForm.getVerifiCode();if ("".equals(sessionVerifiCode) || null == sessionVerifiCode) {return Result.fail().message("验证码失效,请刷新后重试");}if (!sessionVerifiCode.equalsIgnoreCase(loginVerifiCode)) {return Result.fail().message("验证码错误");}// 从session中移除现有验证码记录session.removeAttribute("verifiCode");// 对用户类型进行校验Map<String, Object> map = new LinkedHashMap<>();  // 用于存放响应的数据switch (loginForm.getUserType()) {case 1:try {Admin admin = adminService.login(loginForm);if (null != admin) {// 在数据库找到该用户,将用户类型和用户id转换为密文,以token向客户端返回信息map.put("token", JwtHelper.createToken(admin.getId().longValue(), 1));} else {throw new RuntimeException("用户名或密码错误");}// 若没有异常,说明可以登录,返回结果return Result.ok(map);} catch (RuntimeException e) {e.printStackTrace();// 产生异常,返回出错信息return Result.fail().message(e.getMessage());}case 2:try {Student student = studentService.login(loginForm);if (null != student) {// 在数据库找到该用户,将用户类型和用户id转换为密文,以token向客户端返回信息map.put("token", JwtHelper.createToken(student.getId().longValue(), 2));} else {throw new RuntimeException("用户名或密码错误");}// 若没有异常,说明可以登录,返回结果return Result.ok(map);} catch (RuntimeException e) {e.printStackTrace();// 产生异常,返回出错信息return Result.fail().message(e.getMessage());}case 3:try {Teacher teacher = teacherService.login(loginForm);if (null != teacher) {// 在数据库找到该用户,将用户类型和用户id转换为密文,以token向客户端返回信息map.put("token", JwtHelper.createToken(teacher.getId().longValue(), 3));} else {throw new RuntimeException("用户名或密码错误");}// 若没有异常,说明可以登录,返回结果return Result.ok(map);} catch (RuntimeException e) {e.printStackTrace();// 产生异常,返回出错信息return Result.fail().message(e.getMessage());}}return Result.fail().message("查无此用户");}}

4、登录校验后从登录页跳转到首页

4.1、完成 service 方法及其实现类

AdminService

    /*** 根据用户id查找用户* @param userId* @return*/Admin getAdminById(Long userId);

AdminServiceImpl

    /*** 根据用户id查找用户* @param userId* @return*/@Overridepublic Admin getAdminById(Long userId) {Admin admin = baseMapper.selectById(userId);return admin;}

StudentService

    /*** 根据用户id查找用户* @param userId* @return*/Student getStdentById(Long userId);

StudentServiceImpl

    /*** 根据用户id查找用户* @param userId* @return*/@Overridepublic Student getStdentById(Long userId) {Student student = baseMapper.selectById(userId);return student;}

TeacherService

    /*** 根据用户id查找用户* @param userId* @return*/Teacher getTeacherById(Long userId);

TeacherServiceImpl

    /*** 根据用户id查找用户* @param userId* @return*/@Overridepublic Teacher getTeacherById(Long userId) {Teacher teacher = baseMapper.selectById(userId);return teacher;}

4.2、完成 controller 方法

根据请求参数 token 中的信息,传输用户信息给客户端 

/*** 根据登录第二次请求发送来的token,传送用户信息回去* @param token* @return*/@GetMapping("/getInfo")public Result getInfoByToken(@RequestHeader("token") String token){// 判断token是否过期boolean expiration = JwtHelper.isExpiration(token);if(expiration){// 过期,返回错误信息return Result.build(null, ResultCodeEnum.TOKEN_ERROR);}// token没有过期,解析出用户id和用户类型Long userId = JwtHelper.getUserId(token);Integer userType = JwtHelper.getUserType(token);// 向map中传入数据Map<String, Object> map = new LinkedHashMap<>();switch (userType){case 1:Admin admin = adminService.getAdminById(userId);map.put("userType", userType);map.put("user", admin);break;case 2:Student student = studentService.getStdentById(userId);map.put("userType", userType);map.put("user", student);break;case 3:Teacher teacher = teacherService.getTeacherById(userId);map.put("userType", userType);map.put("user", teacher);break;}return Result.ok(map);}

5、解决登录后用户头像错误问题

如下图,用户头像加载错误 

 通过控制台,可以很容易的发现该图片的存放地址,只需将图片放入对应的目录下即可

完成后即可看到头像

 

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

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

相关文章

一文读懂5G智慧教育:42个应用场景如何改变教育

随着5G的到来&#xff0c;教育形态也将会发生巨大变化&#xff0c;而智慧教育作为5G的一个重要应用&#xff0c;到底有哪些细分场景呢&#xff1f; 一、5G虚拟现实教育 作为5G智慧教育的主战场&#xff0c;VR/AR 与教育结合呈现的全新的教学体验&#xff0c;可极大地提升学生学…

ChatGPT,openai科学教育有助于我们理解和掌握人工智能技术

这个时代&#xff0c;人工智能技术已经在各行各业中得到广泛应用&#xff0c;涉及到的领域越来越广泛&#xff0c;例如医疗保健、金融、制造业、物流等等。因此&#xff0c;了解科学的基础原理和科技的应用方法已经成为了一个必要的技能。 科学教育有助于我们理解和掌握人工智能…

智慧班牌源码源,SaaS云平台端、智慧校园管理平台端、家长/教师微信移动端、智慧班牌学生端

智慧电子班牌系统包括&#xff1a;SaaS云平台端、智慧校园管理平台端、家长/教师微信移动端、智慧班牌学生端四大软件平台。 文末获取联系&#xff01; 技术架构&#xff1a; 1、使用springboot框架Javavue2 2、数据库MySQL5.7 3、移动端小程序使用小程序原生语言开发 4、电子班…

干货 | 智慧教育平台生成式人工智能应用的安全要求

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。 第一部分&#xff1a;编制说明 标准制定的基本原则主要包括以下四个方面&#xff1a; 综合性&#xff1a;本标准全面漫盖了智慧教育平台ChatGPT安全保护的要求&#xff0c;以便用户参考&#xf…

打造智慧幼儿园!学会一招,快速实现

近年来各地幼儿园因为门禁松懈而造成的幼儿走失或被陌生人接走的事件也时有发生。给幼儿园门禁管理模式的改善敲响了警钟&#xff01; 孩子的入离园环节是幼儿园一日工作的重中之重&#xff0c;入园要保证孩子都是健康的&#xff0c;离园老师再把孩子健健康康地交还给家长。 这…

数据可视化:揭开“智慧校园”新篇章,助力新时代教育信息化

随着移动互联网、物联网等新一代信息技术的快速发展&#xff0c;建设智慧校园已经具备了成熟的技术条件。自从教育部启动教育信息化2.0计划后&#xff0c;建设智慧校园已成为我国教育信息化发展目标&#xff0c;无论是国家教育事业发展的十三五规划&#xff0c;还是十四五规划&…

智慧教室app

前言 README.md文件里写的非常详细&#xff0c;下面补充几个遇到的问题及解决方案。 安装requirements.txt文件所指定的包 1&#xff09;关于cmake 总的来说&#xff0c;问题不大&#xff0c;不用考虑。参考 2&#xff09;关于dlib 报错问题&#xff1a;ERROR: Failed bui…

ChatGPT:为教育创新提供五大机遇

随着智能技术的不断发展&#xff0c;ChatGPT在教育场景中的创新价值可能比我们能够意识到的还要多。比如它可以自动处理作业、在线答疑&#xff0c;可以辅助语言学习、实时沟通&#xff0c;甚至还可以用于评估诊断、科学研究。国内外关于利用ChatGPT实现教育创新的场景描绘已经…

智慧教育

智慧教育 文章目录 前 言一、智慧教育的内涵二、智慧教育系统1.建立物理系统2.实现纵向、横向、端到端的集成3.教育大数据 总结 前 言 随着物联网以及大数据处理技术的快速发展&#xff0c;教育信息化迎来了新的机遇和挑战&#xff0c;智慧教育是当代教育信息化的新形态&#…

ChatGPT教育领域的智慧伙伴|小智AI

ChatGPT丨小智ai丨chatgpt丨人工智能丨OpenAI丨聊天机器人丨AI语音助手丨GPT-3.5丨OpenAI ChatGPT|GPT-4|GPT-3|人机对话|ChatGPT应用|小智ai|小智ai|小智ai|小智ai|小智AI|chatgpt小智AI 在现代教育领域&#xff0c;人工智能正日益发挥着重要作用&#xff0c;而ChatGPT作为智…

真正的官方ChatGPT镜像

视频演示 真正的官方ChatGPT4.0镜像&#xff0c;代码解释器和官方所有插件都有&#xff0c;爽爆了 地址&#xff1a; https://www.bilibili.com/video/BV17M4y1s7Hi/?spm_id_from333.999.0.0地址 镜像地址&#xff1a; https://ai.aiforme.cloud/需要找我要授权码才能使用~…

TCGA_改版后STAR-count处理方法

TCGA改版后&#xff0c;workflow.type只有STAR-counts数据&#xff0c;先对所尝试的几种处理方法进行记录&#xff1a; R version 4.1.2 &#xff1b; TCGAbiolinks version 2.23.11 方法1 最新版TCGA 矩阵整理&#xff0c;百分百复现成功_sayhello1025的博客-CSDN博客 一、…

探秘WAIC镇馆之宝:AI“钓鱼”AI,人类看戏

杨净 发自 WAIC量子位 | 公众号 QbitAI 一个专攻大模型的“黑客”&#xff0c;竟摇身一变&#xff0c;当选人工智能大会&#xff08;WAIC&#xff09; “镇馆之宝”&#xff1f;&#xff01; WAIC镇馆之宝展区上&#xff0c;一众人工智能领域创新成果亮相。 不管从科技含量、市…

深度长文 | 数据安全共享技术发展综述及在能源电力领域应用研究

开放隐私计算 编者按 数据要素的流通共享与协同应用是数字时代中数据要素市场培育的核心内容&#xff0c;数据安全共享技术能够有效实现数据的安全共享&#xff0c;避免“数据孤岛”现象、隐私泄露事件等.本文对国内外数据安全共享技术研究成果及进展进行了全面综述.首先&…

Unity Open Day 北京站-游戏专场:AI 驱动反外挂:游戏作弊治理新时代

【获取 2023 Unity Open Day 北京站演讲 PPT】 张本梁&#xff1a;下面和大家分享一下我们团队在游戏安全领域AI方面的尝试和落地。 第一块&#xff0c;做游戏安全比较核心的是情报信息的收集。我们必须知道我们的对手——做外挂、打金等黑灰产团队的情报信息&#xff0c;这是我…

Alpha阶段功能规格书

一、概念 FaaS一种不需要关心部署细节的垂直自动化无需人为干预&#xff0c;以一定周期定时发起的任务静态页面不需要动态数据刷新的单一html页面 二、典型用户 开发入门初学者/爱好者 姓名守好嘉年龄18用户市场比例30%用户重要性较为重要典型场景刚刚学了一门新语言&#…

隐私计算头条周刊(2.20-2.26)

开放隐私计算 收录于合集 #企业动态45个#周刊合辑45个#政策聚焦38个#隐私计算92个#行业研究37个 开放隐私计算 开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的…

90后程序员后来都去干什么了?又该如何斩断困境

前言 90后没有赶上毕业包分配工作、工作包分房子、就差发放对象的时代&#xff0c;但我们处在一个科技高速发展、遍地是风口、资源更丰富更便捷的时代。 如今在职场中&#xff0c;90后正逐渐成长为与80后70后并肩作战的主力军。 很多人&#xff0c;25岁以前的时光&#xff0…

2023年CCF中国软件大会专刊征稿火热进行中

点击文末的“阅读原文”&#xff0c;可以跳转到中国软件大会官网的“征稿通知”查看详情&#xff01; CCF中国软件大会&#xff08;CCF ChinaSoft&#xff09;由中国计算机学会&#xff08;CCF&#xff09;主办&#xff0c;是中国软件科学与工程相关领域办会规格最高、参会人数…

大模型时代,腾讯云“复制”腾讯|WAIC2023

点击关注 文&#xff5c;郝鑫 编&#xff5c;刘雨琦 刚过去的WAIC&#xff08;世界人工智能大会&#xff09;俨然成为了大模型厂商的成果汇报大会。 百度文心大模型升级到3.5版本&#xff0c;训练速度提升2倍&#xff0c;推理速度提升30倍&#xff1b;华为云发布盘古大模型3…