# 实验室官网new **Repository Path**: lemon_plus/laboratory-official-websiteNew ## Basic Information - **Project Name**: 实验室官网new - **Description**: 实验室官网! - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-07-29 - **Last Updated**: 2024-01-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 工程简介 # 项目详情 ## 项目功能 主要功能模块如下: ### 用户模块 后端任务: 主要是提供与用户相关的一些接口,例如登录、注册、修改密码等 ### 新生报名模块 为用户提供一个报名加入实验室的途径 ### 文章模块 主要是实现一个发表文章的功能,就像csdn上面那样的技术文章。 保存文章、文章的审核、点赞、评论等接口。 ### 文件模块 主要提供文件(包括图片)的上传下载服务。图片的话例如轮播图、教师图片、项目图片等等场景都有涉及到。 ### 论坛模块 类似于 知乎 的一个论坛,提供发表帖子、后台审核、点赞等。 [//]: # (## 项目结构) [//]: # (com.bitdf.web.official_site) [//]: # ( * config: 配置包 ) [//]: # ( * constant: 常量 ) [//]: # ( * controller: 控制层 ) [//]: # ( * apply: 新生报名模块(用于招新) ) [//]: # ( * article: 文章模块 ) [//]: # ( * file: 文件相关(目前包括 上传下载文件;上传、获取图片) ) [//]: # ( * forum: 论坛) [//]: # ( labInfo: 实验室相关的一些信息(例如:实验室老师信息、实验室人数、实验室项目情况 ) [//]: # ( * user: 用户相关 ) [//]: # ( * other: 其他(目前包含“关于我们”页面的一些接口以及轮播图的接口)) ## 认证与授权 ### 认证方式(大致过程) 1、用户登录时, 会获取其sessionId,把sessionId作为key, 用户实体信息作为value 存储到redis,然后把sessionId以及用户信息一起返回给前端,表示登录成功,响应体如下图所示: ```json { "msg": "登录成功", "code": 200, "data": { "sessionId": "21F878D04723EA041361CFD56B85E74D", "user": { "stuNum": null, "phone": "13434618260", "name": null, "nickName": null, "gender": null, "mail": "123456@qq.com", "city": null, "role": 1, "major": null, "institute": null, "signature": null, "position": null, "createTime": "2022-08-21 01:19:23", "status": 0, "groupx": 3, "imgUrl": "" } } } ``` 2、前端拿到响应数据后,在本次登录后每次向后端发请求都带上名为 token 的请求头,其值为 后端返回的sessionId,每个请求都将会先经过后端的拦截器,在拦截器中会拿到请求头中 token,到redis中获取用户信息,若可以获取得到,该用户即为登录,若获取不到,即为未登录。这里还会根据所访问的接口是否需要某种权限而进行鉴权,即根据用户的role字段来判断是否拥有相关权限。 注:在redis中记录用户登录状态的数据有效期设为30分钟,每次获取就会重置时间,反过来说就是,如果用户30分钟不操作,即会自动退出,下次操作需要重新登录。 ### 鉴权 拦截器 目前项目中主要使用拦截器来进行认证与授权。 使用方法:当某个接口需要进行登录校验 或者 鉴权 时,就到com.bitdf.web.official_site.config.MyWebConfig文件中相对应的位置写上该接口路径即可! 主要拦截器有: * LoginInterceptor: 登录状态校验拦截器 * RootInterceptor: 管理员权限校验拦截器 * GroupLeaderInterceptor: 组长权限校验拦截器 * RequestLimitInterceptor(不是用于认证授权): 用于限制同一用户单位时间内的请求次数 ## 数据库相关 本项目SQL脚本在sql文件夹下,通过运行该 脚本 来创建数据表即可!