【服务器项目部署】✈️将本地项目部署到服务器(二)!

目录

👋前言

👀一、功能调整

🌱二、服务部署

💞️三、代码调整

🍻四、章末


👋前言

        小伙伴们大家好,上篇文章本地实践了如何将本地项目部署到服务器上,从服务器的选择、服务器环境搭建、项目上传启动等方面走了一遍流程,基本上没什么问题; 接着上次的项目更新了部分页面功能,之前的文章链接如下:

【服务器项目部署】⭐️将本地项目部署到服务器!_如何把本地项目部署到服务器上-CSDN博客

👀一、功能调整

        上次本地 项目只是可以流式输出问题答案,并没有别的页面;所以这次静态资源加了一个注册登录页面,后端对应的提供相关的接口;整体的开发流程就是本地调试,没问题之后把本地环境同步到服务器上,然后打个jar包,放到服务器上运行起来,测试下数据就可以了。

·        先把项目部署到服务器上看下页面效果,再来分析具体的实现(页面可能会比较简陋,只在学校的时候了解过 html,css,js,凑合着看。。。)

🌱二、服务部署

        2.1 本地增加了 redis 的使用,所以要在服务器上部署好一个 redis 服务;主要跟之前文章里的步骤一样,把本地安装的 redis 文件上传到服务器上;连接到远程后,找到对应的文件夹,复制粘贴就可以上传了;

        上传成功之后,在 redis 当前路径中输入 cmd 快速进入当前文件夹命令页面,使用以下命令启动服务即可,启动后的页面如下,注意下启动占用的端口号,一般都是 6379:

redis-server.exe  redis.windows.conf 

        :redis 下载安装就不说了,以及如何更改账号密码,以及spriongboot 如何整合,不复杂,大家自行查阅

        2.2 新增表,本地创建的一些表也要同步到服务器的数据库中

        2.3 打包上传,这里不做赘述了,IDEA中打包好之后上传到服务器,使用 java -jar 命令启动,如下: 

         2.4 测试下,可以短暂将端口开放出来,方便使用电脑访问;

        注册登录页面如下,比较简单,邮箱注册后会收到验证码,在有效期之内使用即可注册成功跳转到登录页面;

        登录使用的是注册的邮箱加密码,登录成功之后会跳转到上篇文章的问答页面,在左下角增加了一个个人中心的按钮,从这里可以进行退出操作,为了清除登录产生的 token  

        另外一个就是调整答案的分段显示,调整前是直接流式按行输出,调整为分段处理之后再显示。时间比较零碎,目前的调整就是这些,主要是在下班后和周末的时候调整,整体速度比较慢

💞️三、代码调整

        后端新增的代码不全部沾出来了,只挑以下部分:发送验证码、登录、token创建、接口鉴权

        3.1  验证码发送

        可以参考之前的文章,链接如下: 

基于Springboot框架实现Java发送邮件详解_springboot邮件发送功能 java-CSDN博客

        3.2 token 创建 

        可以参考这篇文章,链接如下:

JWT - 生成token并配置过期时间_jwt设置过期时间-CSDN博客

        3.3 登录

        比较简单,先根据邮箱查询用户,在对比密码,如果通过了的话就将 userId 放入到生成的 token 中,然后同时将 token 做缓存;

    @PostMapping("/userLogin")public Response<LoginResp> login(@RequestBody @Valid LoginReq req){QueryWrapper<StUser> wrapper = new QueryWrapper<>();StUser stUser = new StUser();stUser.setEmail(req.getEmail());wrapper.setEntity(stUser);StUser user = stUserMapper.selectOne(wrapper);if(user != null && user.getPassword().equals(req.getPwd())){String token = jwtUtil.sign(user.getId());LoginResp loginResp = new LoginResp();loginResp.setToken(token);loginResp.setUserId(user.getId());loginResp.setUserName(user.getLoginName());redisUtil.setValueWithExpire(RedisUrlEnum.LOGIN_TOKEN.getKey() + req.getEmail(), token,60*60*24*30L);return Response.success(loginResp);}throw new RuntimeException("error pwd or email");}

         3.4 接口鉴权

        登录之后用户会有一个 token, 后续访问部分接口需要先校验请求头中是否包含有效的 token ,后端校验如下:aop 注解 + 切面类

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Valid {
}
@Aspect
@Component
public class ValidAspect {@Resourceprivate JWTUtil jwtUtil;@Pointcut("@annotation(org.example.aop.Valid)")public void validMethod() {}// 在方法执行前执行 token 校验@Before("validMethod()")public void validateToken(JoinPoint joinPoint) throws Exception {// 获取请求头中的 tokenString token = getRequestToken();if (token == null || token.isEmpty()) {throw new TokenExpiredException("Token is missing or empty.");}// 校验 token 是否过期if (jwtUtil.getUserIdByToken(token) == null) {throw new TokenExpiredException("Token has expired.");}}// 获取请求头中的 tokenprivate String getRequestToken() {// 获取当前请求的 HttpServletRequest 对象ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();if (attributes != null) {HttpServletRequest request = attributes.getRequest();// 从请求头中获取 Authorization 字段return request.getHeader(HttpHeaders.AUTHORIZATION);}return null; // 如果 RequestContextHolder 没有有效的请求上下文,返回 null}// 自定义异常类,用于抛出 token 过期的异常public static class TokenExpiredException extends Exception {public TokenExpiredException(String message) {super(message);}}
}

        3.5 前端保存参数

        登录时,后端接口返回的 token 等用户参数,可以放到 localStorage 中,后续有需要鉴权的请求,可以从这里取值然后放到请求头中再进行访问即可

🍻四、章末

        简单的小项目,主要是熟悉服务器的部署,以及前后端请求的一些交互 ;后面有时间的话再进行更新,整理下项目结构,推到远程仓库中,可以更方便操作

        文章到这里就结束了~

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

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

相关文章

Kafka消息队列

目录 前置内容常用脚本说明和示例描述与定义部分术语说明两种模式点对点模式发布订阅模式 topic主题命令行操作指令生产者Broker消费者 前置内容 队列&#xff1a; 先进先出 应用&#xff1a; 大数据中主要用于离线和实时处理 流程&#xff1a; Flume正常获取数据&#xff0c;…

如何使用 Ansys OptiSlang 同时运行多个参数化设计研究

了解如何通过使用 OptiSLang 同时运行多个参数化设计研究来提高工作效率。 了解参数化设计研究的重要性 参数化设计研究在工程和设计过程中起着至关重要的作用。通过改变输入参数&#xff0c;工程师可以探索不同设计选择的效果&#xff0c;并优化其设计以满足性能、成本或其他…

Nginx (40分钟学会,快速入门)

一、什么是Nginx ? 可以做什么 &#xff1f; Nginx 是高性能的 HTTP 和反向代理的 web 服务器&#xff0c;处理高并发能力是十分强大的&#xff0c;能经受高负载的考验&#xff0c;有报告表明能支持高达50000个并发的连接数.Nginx特点就是内存少&#xff0c;并发能力强。事实上…

【Rust自学】10.6. 生命周期 Pt.2:生命周期的语法与例子

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 10.6.1. 生命周期标注语法 生命周期的标注并不会改变引用的生命周期长度。如果某个函数它制定了泛型生命周期参数&#xff0c;那么它就可…

【Android项目学习】3. MVVMHabit

项目链接 文章目录 一. 项目结构1. 项目整体划分2. 模块细分 二. Android知识点学习1. registerActivityLifecycleCallbacks方法2. 一. 项目结构 1. 项目整体划分 MVVMHabit是以谷歌DataBindingLiveDataViewModel框架为基础&#xff0c;整合OkhttpRxJavaRetrofitGlide等流行…

【大模型】7 天 AI 大模型学习

7 天 AI 大模型学习 Day 3 今天&#xff0c;我们要一起学习大模型微调了 &#xff5e; 包括&#xff1a;大模型微调领域概览、Lora微调 等 &#xff5e; 文章目录 7 天 AI 大模型学习 Day 3大模型微调概览大模型项目 pipeline提示词工程 Prompt EngineeringIn-context Learning…

密码学精简版

密码学是数学上的一个分支&#xff0c;同时也是计算机安全方向上很重要的基础原理&#xff0c;设置密码的目的是保证信息的机密性、完整性和不可抵赖性&#xff0c;安全方向上另外的功能——可用性则无法保证&#xff0c;可用性有两种方案保证&#xff0c;冗余和备份&#xff0…

DeepSeek-V3 正式发布,已在网页端和 API 全面上线,性能领先,速度飞跃。

DeepSeek-V3 在推理速度上相较历史模型有了大幅提升。在目前大模型主流榜单中&#xff0c;DeepSeek-V3 在开源模型中位列榜首&#xff0c;与世界上最先进的闭源模型不分伯仲。 简介 DeepSeek-V3是一个强大的混合专家 (MoE) 语言模型&#xff0c;总共有 671B 个参数&#xff0c;…

图像超分辨新SOTA!南洋理工提出InvSR,利用大型预训练扩散模型图像先验来提高 SR 性能, 登上Huggingface热门项目。

南洋理工大学的研究者们提出了一种基于扩散反演的新型图像超分辨率 (SR) 技术&#xff0c;可以利用大型预训练扩散模型中蕴含的丰富图像先验来提高 SR 性能。 该方法的核心是一个深度噪声预测器&#xff0c;用于估计前向扩散过程的最佳噪声图。一旦训练完成&#xff0c;这个噪…

MySQL低版本没有函数row_number() over的解决方案

最近在维护老项目时&#xff0c;需要对历史数据做分析取出分区数据中的第一条&#xff0c;无奈因为MySQL版本过低&#xff0c;无法使用函数row_number() over&#xff0c;苍了个天~ 不过这点小事怎么可能难倒我们这群考古专家呢&#xff0c;在此分享一下解决方案。 主要原因是问…

贵州省贵安新区地图+全域数据arcgis格式shp数据矢量路网地名+卫星影像底图下载后内容测评

贵州省贵安新区地图全域数据arcgis格式shp数据矢量路网地名卫星影像底图 贵安新区地图是一款基于ArcGIS格式的地理信息系统数据集&#xff0c;包含2022年3月更新的详尽矢量路网、地名信息以及卫星影像底图。这款数据集是针对贵安新区这一特定区域设计的&#xff0c;对于规划、…

npm install --global windows-build-tools --save 失败

注意以下点 为啥下载windows-build-tools&#xff0c;是因为node-sass4.14.1 一直下载不成功&#xff0c;提示python2 没有安装&#xff0c;最终要安装这个&#xff0c;但是安装这个又失败&#xff0c;主要有以下几个要注意的 1、node 版本 14.21.3 不能太高 2、管理员运行 …

音视频入门基础:MPEG2-PS专题(5)——FFmpeg源码中,解析PS流中的PES流的实现

一、引言 从《音视频入门基础&#xff1a;MPEG2-PS专题&#xff08;3&#xff09;——MPEG2-PS格式简介》中可以知道&#xff0c;PS流由一个个pack&#xff08;包装&#xff09;组成。一个pack 一个pack_header 一个或多个PES_packet。pack_header中还可能存在system header…

记一次k8s下容器启动失败,容器无日志问题排查

问题 背景 本地开发时&#xff0c;某应用增加logback-spring.xml配置文件&#xff0c;加入必要的依赖&#xff1a; <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>8…

【问题记录】npm create vue@latest报错

1&#xff0c;错误日志 npm error code EPERM npm error syscall mkdir npm error path D:\Program Files\nodejs\node_cache\_cacache npm error errno EPERM npm error FetchError: Invalid response body while trying to fetch https://registry.npmjs.org/create-vue: EP…

JavaWeb开发(六)XML介绍

1. XML介绍 1.1. 什么是XML &#xff08;1&#xff09;XML 指可扩展标记语言(EXtensible Markup Language)XML 是一种很像HTML的标记语言。   &#xff08;2&#xff09;XML 的设计宗旨是传输数据(目前主要是作为配置文件)&#xff0c;而不是显示数据。   &#xff08;3&a…

Vue3实现PDF在线预览功能

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vue篇专栏内容:Vue3现PDF在线预览功能 前言 在开发中&#xff0c;PDF预览和交互功能是一个常见的需求。无论是管理…

win32汇编环境,在窗口程序中画简单图形

;运行效果 ;win32汇编环境&#xff0c;在窗口程序中画简单图形 ;展示点、直线、圆、椭圆、正方形、矩形、圆角矩形的画法 ;将代码复制进radasm软件里&#xff0c;直接编译可运行.重要部分加备注。 ;>>>>>>>>>>>>>>>>>>&…

[7种方法] 如何修复iPad无法连接到App Store

“现在已经 3 天了&#xff0c;我无法从 iPad 连接到 App Store。起初&#xff0c;我以为这是服务器问题&#xff0c;但已经过去 3 天了&#xff0c;问题仍然存在。请帮助我&#xff01;” 如果您的iPad 无法连接到 App Store&#xff0c;可能有多种原因。即使是日期和时间设置…

weblogic安装 12.2.1.4.0 单机

fmw_12.2.1.4.0_wls.jar和jdk-8u341-linux-x64.tar.gz&#xff0c;安装weblogic 安装JDK 8 # 1. 创建Java安装目录 mkdir -p /usr/java cd /usr/java# 2. 解压JDK tar -zxvf jdk-8u341-linux-x64.tar.gz# 3. 配置环境变量 cat >> /etc/profile << EOF export JAV…