前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【学生管理系统】权限管理

【学生管理系统】权限管理

作者头像
陶然同学
发布2023-02-24 13:46:20
9K0
发布2023-02-24 13:46:20
举报
文章被收录于专栏:陶然同学博客

# 7. 程序升级

## 7.1 登录升级

### 7.1.1 图片验证码

* 后端:   * 需要一个生成验证码controller,并将生成的验证码随机字符串存放到redis中   * 用户登录时,获得验证码,对验证码进行校验 * 前端:   * 编写表单,显示验证码(编写函数修改图片验证码路径),点击时可以切换   * 网关放行

1. 需要一个生成验证码controller,并将生成的验证码随机字符串存放到redis中

2. 用户登录时,获得验证码,对验证码进行校验

代码语言:javascript
复制
   @PostMapping("/login")
    public BaseResult login(@RequestBody TbUser tbUser) {
        //0.1 校验:图片验证码
        String key = "login" + tbUser.getUserName();
        String redisVerifyCode = stringRedisTemplate.opsForValue().get(key);
        stringRedisTemplate.delete(key);
        if(redisVerifyCode == null) {
            return BaseResult.error("验证码无效");
        }
        if(! redisVerifyCode.equalsIgnoreCase(tbUser.getImageVerifyCode())) {
            return BaseResult.error("验证码错误");
        }
        //.....
    }

3. 编写表单,显示验证码(编写函数修改图片验证码路径),点击时可以切换

4. 网关放行

### 7.1.2 邮箱验证码

* 方案1:使用邮件发送工具类,直接发送邮件。【选择】   * 特点:工具依赖第三方,所以第三方如果比较慢时,我们的程序也会慢 * 方案2:使用MQ作为中间件共享发送的信息,然后使用MQ服务进行邮件的发送。(之前演示)   * 特点:使用MQ将第三方解耦,我们的程序不需要依赖第三方的响应时间。

* 后端:   * 准备工作:坐标、yml、工具类   * 编写send方法,用于邮件的发送   * 用户登录时,校验邮箱验证码 * 前端:   * 提供填写邮箱的位置,并有发送按钮   * 提供填写验证码的位置   * 网关放行

* 后端:

  * 准备工作:坐标、yml、工具类

    ~~~xml     <!-- JavaMail 启动器 -->             <dependency>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-starter-mail</artifactId>             </dependency>     ~~~

    ~~~yml     spring:       mail:         host: smtp.126.com          #发送邮件服务器         username: itcast_lt@126.com #账号         password: 1qaz2wsx          #密码         default-encoding: UTF-8     #默认编码时     ~~~

  * 编写send方法,用于邮件的发送

代码语言:javascript
复制
 @Resource
    private JavaMailSender javaMailSender;

    @PostMapping("/send")
    public BaseResult send(@RequestBody TbUser tbUser) {
        try {
            // 随机验证码
            String code = RandomStringUtils.randomNumeric(4);
            // 保存到redis
            String key = "loginEmail" + tbUser.getUserName();
            stringRedisTemplate.opsForValue().set(key, code , 5 , TimeUnit.MINUTES);
            // 发送
            EmailUtils.sendEmail(javaMailSender, "用户登录", tbUser.getEmail(), "验证码为:" + code);
            // 返回
            return BaseResult.ok("邮件发送成功");
        } catch (Exception e) {
            e.printStackTrace();
            return BaseResult.error("发送邮件失败");
        }
    }

  * 用户登录时,校验邮箱验证码

代码语言:javascript
复制
  //0.2 校验:邮件验证码
        String keyEmail = "loginEmail" + tbUser.getUserName();
        String redisEmailVerifyCode = stringRedisTemplate.opsForValue().get(keyEmail);
        stringRedisTemplate.delete(keyEmail);
        if(redisEmailVerifyCode == null) {
            return BaseResult.error("email验证码无效");
        }
        if(! redisEmailVerifyCode.equalsIgnoreCase(tbUser.getEmailVerifyCode())) {
            return BaseResult.error("email验证码错误");
        }

* 前端:

  * 提供填写邮箱的位置,并有发送按钮

代码语言:javascript
复制
async sendEmail() {
      let { data: baseResult } = await this.$axios.post(`/user-service/user/send`, this.user)
      // 提示
      if( baseResult.code == 20000 ) {
        this.$message.success( baseResult.message )
      } else {
        this.$message.error( baseResult.message )
      }
    }

  * 提供填写验证码的位置

  * 网关放行

### 7.1.3 作业:短信验证码

## 7.2 学生列表升级

* 注释掉原有内容:

* 编写 asyncData 发送SSR请求

  ~~~js     async asyncData( context ) {       // ajax       let { data: baseResult } = await context.$axios.get('/classes-service/classes')       // 返回结果       return {         classesList: baseResult.data       }     },   ~~~

* 注意:SSR发送请求时,无法获得浏览器端相应的内容(localStorage、sessionStorage、cookie 等)

  * 在网关放行

## 7.3 角色列表升级

* 注释已有的

* 编写asyncData发送2次ajax

  ~~~js     async asyncData( context ) {       // 发送2次ajax       let ajax1 = context.axios.get('/user-service/role')       let ajax2 = context.axios.get(`/user-service/perm/parent/0`)       let [{data: roleBaseResult}, {data: permBaseResult}] = await Promise.all([ajax1, ajax2])       // 处理数据       return {         roleList: roleBaseResult.data,         permList: permBaseResult.data       }     },   ~~~

* 网关配置

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档