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
英文地址,請注明出處:http://en.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…