本科期间做过的三个JAVA开发项目的概述(后端)

本文详细描述了粮食扦样自动分析系统的摄像头推流、rtmp服务器搭建、JAVACV库使用,以及孙哥外卖的邮箱验证码登录、菜品管理、文件上传等。同时探讨了HAUT校园论坛的用户登录、博客功能和社交互动功能的实现。
摘要由CSDN通过智能技术生成


一.粮食扦样自动分析系统

1.摄像头推流

1.1rtmp服务器搭建

使用nginx

更改配置文件nginx-win-rtmp.conf 并设置推流地址

1.2JAVACV库使用

CameraApplication类:

​ 摄像头应用的基础类,这里面定义了拉流和推流的基本流程,子类只需实现具体的业务方法即可,定义了帧抓取器,输出帧率,摄像头视频的宽、高

​ 获取视频流,在该类里面定义的有帧抓取器,持续拉流和推送

action():调用init():初始化帧抓取器,初始化输出;调用grabAndOutput():持续拉流和推送

RecordCamera类:

​ 重写initOutput():设置编码格式、封装格式、一秒内的帧数、关键帧间隔,附上推流地址,使用了FrameRecorder推流器

​ 重写output():主要是为了附上时间戳并且推流,调用record方法将图像帧保存为视频

2.用户登录

因为集成的是mybatis框架,所以在mapper层还需增加xml文件用于编写sql语句

前后端分离项目,需解决跨域问题,因为是ssm框架,要在mvc-config中配置全局跨域

登录状态采用拦截器(springmvc独有的),在拦截器中解析token,判断是否登录

3.扦样信息获取

就是一个分页查询,参数为页数,大小是写死的

二.孙哥外卖

1.邮箱验证码登录

1.1开启邮箱服务:

​ 在yml中配置stmp邮箱服务,包括端口、邮箱,协议等等。

1.2发送邮件的工具类:

​ 要调用JavaMailSender等封装好的类发送邮件;在controller层调用工具类,发送邮件需要使用redis缓存验证码

1.3使用线程池异步发送验证码:

​ 详见CSDN

1.4登陆状态判断:

​ 该项目不是前后端分离项目,在登陆时将登陆状态放入session里,使用过滤器对登陆状态进行判断

2.菜品相关功能

注意1:方法在接受前端传过来的json类型的参数时要使用注解@RequestBody接收

注意2:要清除redis中的缓存

2.1新增菜品

​ 转到Service层操作,收到的参数是Dto,涉及多个表,需要开启事务操作@Transactional; mybatisplus中service层自带save方法可直接新增;在该service中调用口味中的方法将传来的口味参数添加到数据库。

2.2菜品分页查询

mybatis中自带page容器用于封装分页查询结果;

使用条件构造器LambdaQueryWrapper封装查询条件,查询出菜品dish

查询结束后根据菜品id查询分类名称等封装Dto,在这里需要使用对象拷贝

2.3修改菜品

​ 前端点击修改菜品按钮后要做两个事情:要先查询修改菜品的内容,并且在前端界面上显示,然后才是调用修改菜品的方法。

​ 同样需要开启事务操作

3.文件(图片)上传下载

​ 业务层操作像增加分类、增加表单、提交表单、购物车等增删改查类操作不再赘述

文件上传

​ 文件上传操作放在通用控制层,返回值为文件上传的路径,传递的参数为springboot包下的MultipartFile

​ 在添加文件名防止重名后用MultipartFile的transferTo方法将文件内容传入需要上传的地址

三.HAUT校园论坛

**注:**前端和后端交互时传递的参数要转换为json格式,传递对象时使用@RequestBody注解

**注:**controller层通常也是用@responseBody注解,将 该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用。

1.用户登录模块

为了安全起见用户登录采用了springsecurity,所以需要重写springsecurity中的一些过滤器

1.1自定义登录逻辑

​ 重写usernamepasswordfilter过滤器会导致全局异常处理的拦截器无法拦截到抛出的异常;解决办法是新添加一个controller在控制层,登录逻辑直接复制UsernamePasswordAuthenticationFilter即可。

​ 该登录用的是账号密码的登录,但是加了个验证码登录,验证码要放在

1.2登录状态自定义

security判断登录的本质就是看SecurityContextHolder.getContext().getAuthenticaition()里是不是null

​ 由于是前后端分离,账号登录状态的判断需要使用token,我们封装一个类来维护token的操作,token里存的应是loginAdmin的UUID,然后再使用UUID作为key、将账户信息存入redis里。

登陆成功后除了要返回token外,还要缓存用户的信息到redis里,判断登录状态时需要额外写一个过滤器,这个过滤器要执行在默认判断登录的过滤器前面判断逻辑为:

1.根据前端返回的Token解析出用户id

2.根据用户id查询redis里是否有对应的用户信息

3.若有则为登录,要往SecurityContextHolder中塞值

这么做的目的:

与之前的登录状态判断相比,这次增加了将用户信息存入redis的步骤,这样可以自由定义登陆状态过期时间,即使前端浏览器一直存有token 一段时间后登陆状态也会失效

**将用户信息存入redis,**可以随时获取登录用户的信息,这样也方便前端展示用户信息;这些功能都封装在AdminTokenService类里

1.3获取当前登录账号

​ 这点要着重说明,要实现授权功能就要有这个方法,要在SecurityContextHolder内的Authentication中获得username,从而找到当前登录的账号

2.博客功能管理

新增、删除功能不再赘述,删除功能需要判断该博客属不属于目前已登陆的用户

2.1博客分页查询

1.通过queryWrapper封装查询条件:搜索查询条件(标题、正文)分类查询条件、是否删除等。

2.对象拷贝,将分页查询的博客内容、该账号是否点赞该博客,该博客点赞数等封装成vo返回

2.2查询自己的博客

1.通过getLoginUser方法获取到当前登录的账户

2.查询后将分页查询的博客内容、该账号是否点赞该博客,该博客点赞数等封装成vo返回

2.3博客上传图片的问题

在前端集成了富文本编辑器,有两种方式可以选择:1.有专门的图片存储服务器(如阿里云oss对象存储),正文只存放图片路径。2.将图片转为base64编码格式直接显示

3.收藏、点赞功能

收藏和点赞功能的实现方法类似,一个用户对一个博客只能收藏或点赞一次。

收藏、点赞方法需要判断之前是否已经收藏或点赞,若没有收藏则收藏,若点过了则取消收藏,默认收藏用户为当前登录用户

并且收藏功能多一个查询当前账号已收藏博客的方法

4.评论功能

只实现了对博客的评论,没有实现对评论的评论。

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值