【Easy云盘 | 第三天】完成用户系列接口

目录

前言:

今日完结任务:

1.完成用户找回密码,退出登录接口

2.修改密码: 

3.获取用户头像:

 4.获取用户使用内存大小:、

5.更新用户头像:

6.登录拦截

今日总结:


前言:

        本项目非原创,我也只是作为一名初学者跟着成熟的up主一起敲代码而已。视频来源于:

Springboot项目实战 easypan 仿百度网盘 计算机毕业设计 简历项目 项目经验(后端)_哔哩哔哩_bilibiliSpringboot项目实战 easypan 仿百度网盘 计算机毕业设计 简历项目 项目经验(后端)共计28条视频,包括:项目简介、项目架构、环境配置等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV1qV4y1d7zY

    在哔哩哔哩闲逛看到这个项目,感觉还不错,于是想要学习一下这个项目怎么写。项目日记也会同步更新。(本人不分享本项目源码,支持项目付费) 

本项目大量采用了先前项目中已经写好的代码,而且UP主讲的也很快。因此不适合新手作为自己的第一个项目。 

今日完结任务:

1.完成用户找回密码,退出登录接口

用户找回密码Controller层:

逻辑为:先对参数进行校验。之后先判断传入的图片验证码是否正确,如果正确的话就进入server层来执行更新密码的逻辑。

另外无论验证码是否正确,都要删除本次验证码,避免被重复使用。

server层的逻辑也很简单:先判断用户的邮箱是否存在 ,如果不存在就抛出异常,如果存在就校验邮箱验证码,如果邮箱验证码校验正确,就更新数据库中的用户密码,实现用户忘记密码后的重置密码。

此外由于修改密码属于敏感操作,因此我们要把它封装成为一个事务,避免多线程之间的被打断情况,所以我们使用了@Transactional注解来封装当前方法为一个事务。

2.修改密码: 

 先对用户输入的密码进行MD5加密,然后调用userInfoService的updateUserInfoByUserId方法来对用户密码进行修改。

3.获取用户头像:

这里我们没有使用阿里云OSS来进行存储,这次换了一种方式:存储到本地。

这段代码的逻辑为:构造存储用户头像的文件地址,如果不存在,先构造文件夹,如果存在,就读取当中头像。如果读取不到,就调用printNoDefaultImage方法来向头像问价存储地址中写入默认头像。

最终调用response.setContentType方法来告知响应内容为jpg格式的图片,同时调用readFile方法把当前头像写入响应相应输入流。因为这个方法可以可以复用,所以我在这里贴一下对应的代码:

readFile方法: 

  protected void readFile(HttpServletResponse response, String filePath) {
        if (!StringTools.pathIsOk(filePath)) {
            return;
        }
        OutputStream out = null;
        FileInputStream in = null;
        try {
            File file = new File(filePath);
            if (!file.exists()) {
                return;
            }
            in = new FileInputStream(file);
            byte[] byteData = new byte[1024];
            out = response.getOutputStream();
            int len = 0;
            while ((len = in.read(byteData)) != -1) {
                out.write(byteData, 0, len);
            }
            out.flush();
        } catch (Exception e) {
            logger.error("读取文件异常", e);
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    logger.error("IO异常", e);
                }
            }
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    logger.error("IO异常", e);
                }
            }
        }
    }
printNoDefaultImage()方法:
 private void printNoDefaultImage(HttpServletResponse response) {
        response.setHeader(CONTENT_TYPE, CONTENT_TYPE_VALUE);
        response.setStatus(HttpStatus.OK.value());
        PrintWriter writer = null;
        try {
            writer = response.getWriter();
            writer.print("请在头像目录下放置默认头像default_avatar.jpg");
            writer.close();
        } catch (Exception e) {
            logger.error("输出无默认图失败", e);
        } finally {
            writer.close();
        }
    }

 4.获取用户使用内存大小:、

从Redis中去读用户使用内存大小。

根据用户ID来查询用户在redis中的空间对象。如果没有查询到,就从数据库中去获取用户已经使用的空间大小。构建出一个新的spaceDTO来存储到Redis中。设置键的生存日期为1天。

5.更新用户头像:

先从session中获取用户信息,然后构造文件夹地址。之后尝试把头像写入文件夹地址当中。如果写失败就打日志:“上传头像失败”。

最后清空一下之前的会话旧数据,把新数据先写入数据库中,再更新会话。

6.登录拦截

整体的逻辑很简单,主要就是判断当前会话中的有没有User信息。如果没有就进行拦截。

之后,我们设置拦截所有被GlobalInterceptor注释的方法, 在执行requestInterceptor方法之前,使用前置通知,执行interceptor方法,而在这个方法中,我们就做了登录校验。

今日总结:

写重复的代码比较多,没有啥意思。但是获取用户头像和更新用户头像不会写,跟着视频写完的,学到了很多。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一盘牛肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值