JavaEE-博客系统项目

项目介绍

准备工作

创建数据表

创建项目

添加依赖

创建对应目录

除了基本的数据层mapper,业务层service,交互层controller,还创建了公共类的层common,枚举类层enums,异常类层,和实体类层pojo。

配置项目配置文件

准备前端页面

将前端页面复制到static目录下

测试

项目公共模块 

统一返回格式

项⽬分为控制层(Controller), 服务层(Service), 持久层(Mapper). 各层之间的调⽤关系如下:
统一返回结果实体类。
先创建好一个枚举类
定义了一个成员变量,枚举类有了成员变量就需要实现构造函数,使用 

@AllArgsConstructor 这个注解来形成包括所有成员变量的构造函数,定义了两个枚举常量。

pojo是所有实体类的合集,差不多是这意思,现在的实体类分的很细,和数据库交互的实体类,接收的实体类,返回的实体类,有了更细的分层。

定义了三个成员变量,第一个就是定义的枚举类,表示了这个返回数据的状态,errMsg是业务错误时的是什么错误原因,data是返回数据正确时填充的交给前端的数据。并且实现了两个返回该类型的方法,一个是错误方法返回一个状态码为错误的result对象,一个是成功方法返回一个状态码为正确的result对象。这会在统一返回格式用到。

统一返回结果

在公共类创建统一返回结果的处理类。

对所有的返回结果进行了处理,如果返回格式不是result类,就进行包装成result类返回,是result类就直接返回,string类需要另外的处理。 

统一异常处理

创建异常类

只要继承了异常类,那么这个类就可以视为自定义的一个异常类,里面的成员变量和方法都是看需求自定义的。

统一异常处理类

目前只创建了针对两个异常的处理,都是先写入日志,然后再将异常里填充的错误信息交给Result类当中的错误方法来返回一个业务状态码为错误的result对象。

业务代码

持久层

先创建两个基于不同实体类和数据库交互的类

先暂时的使用mybatis-plus所提供的方法,如果需要其他的方法那就另外实现。

实现博客列表

首先在controller层实现前端接口

实现业务层代码

在业务层为了更好的解耦,需要先定义接口,再通过impl实现类来实现接口的方法。

规范当中,只给前端需要的数据,而直接从数据库取出的数据,多了一些不需要的属性,那么就需要另外定义一个类来返回给前端。

将更新时间和是否删除这两个字段删除了。

实现博客详情

⽬前点击博客列表⻚的 "查看全⽂" , 能进⼊博客详情⻚, 但是这个博客详情⻚是写死的内容. 我们期望能够根据当前的 博客 id 从服务器动态获取博客内容.

controller层

 service层

实体类的Date日期属性中,想要指定格式可以通过这个注解。

 

当为null时,会报异常,那么就可以在异常统一处理将这个异常进行处理。

实现登录

 

所以要使用令牌技术。

令牌技术

令牌的校验并不是由服务端进行校验的,而是通过提供的令牌校验接口来校验,所以不管是哪个服务器,都有校验令牌是否有效的能力。

JWT令牌

令牌本质就是—个字符串, 他的实现⽅式有很多, 我们采⽤—个JWT令牌来实现.

介绍

JWT全称: JSON Web Token

官⽹: https://jwt.io/

JSON Web Token(JWT)是—个开放的⾏业标准(RFC 7519), ⽤于客⼾端和服务器之间传递安全可靠的信息.

其本质是—个token, 是—种紧凑的URL安全⽅法.

JWT组成

JWT令牌生成和校验

引入依赖

生成令牌
对于密钥有⻓度和内容有要求

这一串就是生成key依赖的字符串密钥。

校验令牌

 

 

 

创建请求和响应的实体类

传递的参数为对象的时候,参数校验可以使用这两个注解在类里面对成员变量进行注解校验,message是不满足条件时报异常的字符串,length是检验属性长度的,max是最长,min是最短。

实现controller

这次交互使用body进行交互,body的默认格式就是json,接收body参数需要用requestbody注解,而想要之前在实体类的注解起效,需要在对象旁边加一个validated注解。

实现service

先构造出wrapper条件,再使用mybatis-plus实现的持久层方法来查询用户,再对密码进行校验,最后将业务需要的字段填充进令牌token里,这是看业务需求来选择填充哪些的。 

接口测试

成功。

实现强制要求登录

当⽤户访问 博客列表页 和 博客详情页 时, 如果⽤户当前尚未登陆, 就⾃动跳转到登陆页⾯. 我们可以采⽤拦截器来完成, token通常由前端放在header中, 我们从header中获取token, 并校验 token是否合法。

先创建一个拦截器,和前端约定好,将token从header上传递,然后对这个token进行检验,如果没有token或者token不正确都会抛异常,经过检验后没有问题就允许访问。

定义拦截路径

 

将除了登录页面以外的所有页面都拦截。

测试

不携带token

携带正确token

 

实现显示用户信息

实现用户退出

实现发布博客

实现删除/编辑博客

 

编辑和删除是只有帖子博主才能操作,所以需要前端来判断是否要显示这两个接口。

加密/加盐

一般还需要重新得到的密码就用对称和非对称加密算法,如果不需要再用到,只需要进行核验的话一般用到摘要算法。

 

 

 

加密算法可以任意选择,重要的是概念,会通过算法来形成一个盐,这个盐会和密码一起以某种方式组合在一起然后加密形成密文,数据库中保存的是密文和盐,当注册好后,再次登录,那么拿的就是明文再加上数据库中保存的盐来形成密文,和数据库中的密文进行校验,相等就视为密码正确。

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

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

相关文章

Java项目:基于SSM框架实现的软件工程项目管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本项目管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…

[按键手机安卓/IOS脚本插件开发] 按键插件调试与判断循环结构辅助工具

实现按键插件的核心原理 通过一个table类型的QMPlugin变量实现按键精灵调用Lua函数,例如 -- Lua代码 -- 实现两数相加求和 function QMPlugin.Add(a, b) return a b end 将以上代码保存成.lua文件,例如test.lua后,放入按键精灵手机助手的p…

提示词框架(9)--CARE

提示词框架不止是AI的框架,也可以是我们的思考框架,拆解问题的方法!!! CARE框架是一种用于优化提示词设计的方法,它帮助用户更有效地与AI进行交互,特别是在需要获取特定信息或实现某些任务时。…

uniapp+vue2 input不显示明文密码,点击小眼睛显示或隐藏密码

<u-input placeholder"请输入密码" prefixIcon"lock" :password"showPassword" v-model"formData.password"prefixIconStyle"font-size: 25px;color: #3C9CFF" border"none"><template slot"suffix…

时间序列的类增量学习:基准与评估

论文地址&#xff1a;https://dl.acm.org/doi/abs/10.1145/3637528.3671581 论文源码&#xff1a;https://github.com/zqiao11/TSCIL 会议&#xff1a;SIGKDD 2024&#xff08;CCF-A&#xff09; 现实环境本质上是非平稳的&#xff0c;随着时间推移常会引入新类别。这在时间序…

智能攻击原理和架构

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 智能攻击系统基于**人工智能&#xff08;AI&#xff09;与大语言模型&#xff08;LLM&#xff09;技术**&#xff0c;通过**环境感知→自主决策→动态执行→对抗进化**的闭环架构实现高效网络入侵。以下…

Beamer-LaTeX学习(教程批注版)【4】

众所周知&#xff0c;随着显示器普及宽屏化&#xff0c;PPT排版需要多列化来充分利用页面的横向空间。 这节课我们来学习如何创建列&#xff0c;即在beamer中增加列内容&#xff0c;以及如何对齐列。 1 使用不同的宽度来创建列 在beamer中我们通过在页面上使用columns环境来创…

通俗理解JVM细节-面试篇

文章目录 前言JVM概述JVM是什么&#xff1f;解决了什么问题&#xff1f;JVM运行流程JVM 与 JRE&#xff0c;JDK的关系 JVM内存结构JVM区域划分程序计数器栈堆方法区 类加载机制五个阶段加载验证准备解析初始化总结双亲委派模型 垃圾回收内存管理什么是GC&#xff1f;如何判定谁…

意识边疆保卫战:22:47深圳AI-BioFab人机融合危机全息实录

前言 前些天发现了一个巨牛的人工智能免费学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 &#x1f9e0;《意识边疆保卫战&#xff1a;22&#xff1a;47深圳AI-BioFab人机融合危机全息实录》 副标题&#xff1a;机械义…

langchain从入门到精通(三十四)——RAG优化策略(十)父文档检索器实现拆分和存储平衡

1. 拆分文档与检索的冲突 在 RAG 应用开发中&#xff0c;文档拆分 和 文档检索 通常存在相互冲突的愿望&#xff0c;例如&#xff1a; 我们可能希望拥有小型文档&#xff0c;以便它们的嵌入可以最准确地反映它们的含义&#xff0c;如果太长&#xff0c;嵌入/向量没法记录太多…

Javaweb - 7 xml

XML 是EXtensible Markup Language 的缩写&#xff0c;翻译过来就是可扩展标记语言。即&#xff0c;XML 和 HTML 一样&#xff0c;都是标记语言&#xff0c;也就是说&#xff0c;它们的基本语法都是标签。 特点&#xff1a; 1. 可扩展&#xff1a;即 XML 是允许自定义格式的。但…

qml实现 裁剪进度条

我们需要实现一个垂直进度条效果&#xff0c;但使用图片裁剪的方式。具体需求&#xff1a; 1. 图片位置固定&#xff0c;容器对齐其左边和下边&#xff0c;宽度和图片相同。 2. 容器背景透明&#xff0c;调整裁剪容器的高度&#xff0c;使其有高度进度条的感觉&#xff08;从下…

Dify 工作流全栈解析:从零构建你的 AI 应用流程引擎

AI工作流的导言&#xff1a; 工作流系统&#xff08;Workflow System&#xff09;是 Dify 的核心组成部分&#xff0c;它通过可视化编程界面支持创建复杂的 AI 应用程序。用户可以将不同的功能块连接起来&#xff0c;从而设计出用于处理数据、与 AI 模型交互、管理条件以及执行…

上下位机通讯规则

0&#xff1a;事由 最近开发&#xff0c;上位机Qt与下位机通讯的时候发现通讯规则有些不一样&#xff0c;这里简单记录一下 。所有代码基于元宝生成&#xff0c;属于伪代码不保证真实可用&#xff0c;啊但是逻辑是这么个逻辑。 1&#xff1a;底层通讯规则 以STM32向上位机通讯…

创建平衡二叉树C++

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 平衡二叉树&#xff1a;每个节点的左右子树高度差不超过1 class Solution { public:TreeNode* dfs(vector<int>& nums, int left, int right){if(l…

海光の初体验

背景 八张K100的风扇已经将近一年没转过了…早在今年4月29日&#xff0c;Qwen3正式发布并全部开源8款「混合推理模型」。作为Qwen系列中的最新一代大型语言模型&#xff0c;Qwen3在推理、指令遵循、工具调用、多语言能力等方面进行了全面增强。海光DCU&#xff08;Deep Comput…

场外交易(OTC)财富管理系统开发及解决方案报告

——跨境金融科技赋能机构客户新增长 一、OTC市场现状与机构业务痛点 1. 政策机遇与市场扩容 “北向互换通”期限延长&#xff1a;2025年7月1日&#xff0c;中国外汇交易中心联合香港交易所将利率互换合约期限延长至30年&#xff0c;首日交易规模达15.3亿元&#xff0c;填补超…

pytorch底层原理学习--JIT与torchscript

文章目录 0 目的1 TorchScript1.1 语言特性的限定性1.2 设计目的&#xff1a;模型表达的专注性 2pytorch JIT&#xff08;Just-in-time compilation)2.1pytorch JIT定义2.1pytorch JIT整个过程&#xff1a;1. 前端转换层&#xff1a;生成静态计算图2. 中间表示层&#xff08;IR…

Ubuntu+Nginx+php+SQLite3+typecho手动搭建个人博客

零.Ubuntu环境 一.安装nginx 使用以下指令进行nginx web服务器安装&#xff1a; apt-get install nginx 如果提示找不到安装包&#xff0c;也可以更新一下系统的apt环境包&#xff1a; sudo apt update 安装完成后&#xff0c;可以使用以下指令查看nginx是否处于激活状态&#…

网络协议概念与应用层

1.概念 1.1 例子 点外卖 上述这个过程,就是自定义协议 自定义协议,具体的方式也是非常灵活的 2.几种开发中更常见的格式 2.1xml 上古时期的组织数据的格式 通过标签来组织数据 xml的优势:让数据的可读性变得更好了 劣势:标签写起来繁琐,传输的时候也占用更多网络带宽 2.2…