開發博客系統

前言

準備工作

數據庫表分為實體表和關系表

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

第一,建數據庫表

在這里插入圖片描述
然后導入前端頁面
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

創建公共模塊

就是統一返回值,異常那些東西

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
自己造一個自定義異常

在這里插入圖片描述

普通類

在這里插入圖片描述

在這里插入圖片描述

mapper

在這里插入圖片描述
在這里插入圖片描述

獲取全部博客

我們只需要返回id,title,content,userId,updateTime就可以了

在這里插入圖片描述
所以我們直接定義一個返回的類
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
但是這個時間展示不太好看
我們可以設置一下,就是改一下get方法

在這里插入圖片描述

這個是方法一,設置get方法,但是注意的是,這個get方法只對date類型的有效,對這個類型沒有效果
方法二就是用注解

在這里插入圖片描述
在這里插入圖片描述
如果是date類型的話,就要設置時區,就是上面的那個注解

前端

在這里插入圖片描述
在這里插入圖片描述
這樣就成功了

獲取博客詳情

博客詳情我們還是和上面的接口返回一樣的類

在這里插入圖片描述
在這里插入圖片描述

如果要實現全部列表展示部分數據,詳情列表展示全部數據,可以在get方法那里做文章,那么這樣的話,兩個接口的返回類型就不一樣了,因為get方法都不一樣

在這里插入圖片描述
在這里插入圖片描述

但是我們這樣寫還沒有判斷查出來是否為null

我們判斷是否為null也可以用注解

在這里插入圖片描述
@NotNull表示不能為null
@NotEmpty表示不能null,且不為空
@NotBlank表示不為空

在這里插入圖片描述
表示id不能為null
如果參數id為null,就會報這個異常HandlerMethodValidationException

可以捕獲一下

在這里插入圖片描述
在這里插入圖片描述

前端

在這里插入圖片描述

在這里插入圖片描述
這樣就OK了

Jwt令牌

在這里插入圖片描述
如果我們使用cookie和session的話
這個負載均衡的作用就是根據網速配置那些東西去讓客戶端去選擇用哪個服務器,這些服務器都是部署的同一個項目
如果用session1的話,如果下一次請求負載均衡換了服務器的話,session就失效了,就找不到了,因為不同的服務器有不同的sessionId
所以在多機多集群的部署下,session就失效了

我們的處理方法之一就是設置一個公共的服務器,專門去存儲session這些東西,比如redis,session都存儲在這個redis里面,而不是對應的服務器里面

方法二就是生成Jwt令牌
用戶第一次訪問服務器的時候,就會帶著用戶信息去訪問
然后服務器就會給客戶端返回一個令牌,這下有了這個令牌,就是token,就可以攜帶令牌token去訪問不同的服務器了

令牌的有點就是解決了集群環境的認證問題
但是我們需要自己去實現令牌,令牌傳遞,令牌校驗

Jwt官網

在這里插入圖片描述
這個就是token,這個不是加密的

第一個是header,聲明一個頭,說明算法是什么等等
第二個是載荷,聲明我們的信息是什么
第三個是簽名,
現在開始使用Jwt令牌
先引入依賴

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
以點來進行分割的
復制到官網去

在這里插入圖片描述
上面這個沒有簽名
現在開始設置簽名

簽名就是一個key,所以我們還要定義一個key

在這里插入圖片描述
在這里插入圖片描述

但是報錯了,這個是因為我們的簽名太短了

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
但是我們的這個簽名是非法的

我們專門來定義一個方法去生成key

在這里插入圖片描述
這個就是生成的簽名

在這里插入圖片描述
現在開始校驗token
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
我們在重新生成一個token

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
我們來把簽名改一下

在這里插入圖片描述

用戶輸入賬戶密碼,生成token,返回給前端,前端存儲起來,每次訪問都要攜帶token,每次訪問攔截器都要去判斷token,校驗token

登錄

登錄的請求和響應數據都可以設置為單獨的類
請求就是用戶名和密碼
響應就是userId,和token

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

這樣就成功了

在這里插入圖片描述
傳入的參數是類的話就用注解Validated
在這里插入圖片描述

然后類里面的成員變量就用具體的限制注解

如果傳入的參數直接就是基本類型,那么就可以用具體的注解限制了

在這里插入圖片描述
在完善一下條件的判斷

前端

在這里插入圖片描述
我們在前端把token存儲在localStorage這里,這樣就會一直存著了
在這里插入圖片描述
在這里插入圖片描述

登錄成功這樣就存儲好了

而且這個不會隨著服務器的重啟而清空
不會改變
只會隨著登錄信息的改變而改變

我們這就把token放在header里面了,這樣的話,后端只需要用request就可以得到token了
而且每次請求都會攜帶token

攔截器

在這里插入圖片描述
這樣我們的攔截器就寫成功了
現在開始配置攔截器
就是配置路徑那些

在這里插入圖片描述
這樣我們就成功了

但是值得注意的就是,當我們用postman測試的時候,就要手動添加對應的header才可以測試成功,手動添加user_token
因為poatman沒有前端添加header的操作

還有一個點就是localStorage并不是header,localStorage是存儲在瀏覽器中的,長期長達24h
而header是每次請求發出的請求體
所以每次發生請求
每次ajax的時候,都要把localStorage中的token添加到header中
每次ajax,這個我們就要用新的知識了
在這里插入圖片描述

這串代碼的意思就是每次ajax都把token設置到header中
但是你把這串代碼放在一個html中,那么這串代碼就只在這個html中生效
所以我們把這個代碼放在一個js文件中
然后每個html頁面都要引入這個頁面

<script src="js/common.js"></script>

在這里插入圖片描述
所以這里也要改一下

所以每次請求都會ajax,都會帶入token
都會去攔截器中判斷,成功的話就正常controller
如果token校驗失敗的話
就會返回狀態碼401
意思就是ajax失敗了
所以每個ajax失敗的請求都要判斷一下
我們這里重點判斷401狀態碼
每次ajax失敗
所以我們還是寫在一個公共的js文件中

在這里插入圖片描述
我們去前端頁面測試的時候,直接把localStorage刪完就可以了

然后就成功了

博客列表頁與博客詳情頁獲取個人信息

在這里插入圖片描述
定義一個返回的類

在這里插入圖片描述
在這里插入圖片描述
注意postman測試的時候,一定要手動添加header

在這里插入圖片描述

這樣就OK了
在這里插入圖片描述

在加上一些限制

前端

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

或者這樣也可以

由于博客詳情頁面也要定義getUserInfo這個方法,而且只有url不同
所以我們把這個方法也放在一個公共的js文件中

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
這樣就可以了

注銷

右上角有一個注銷按鈕
注銷按鈕就是要退出登錄
而且每個頁面除了登錄頁面,都有這個功能
所以我們還是寫在common.js中

退出登錄就是在localstorage中刪除token就可以了

在這里插入圖片描述

這樣就可以了沒有后端的操作

發布博客

還是要添加一個請求類

在這里插入圖片描述
我們這個設計有點缺陷
就是博客列表那里會顯示不是自己的博客,但是沒有關系
我們自己寫的博客,作者還是自己的

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
這個可以不用設置,因為有默認值
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

完善一下

前端

在這里插入圖片描述這樣寫是不可以的
因為makedown有mk的獲取方式

markdown

這個就是markdown網站

在這里插入圖片描述
這個就是對應的組件

在這里插入圖片描述

這個是對markdown組件的樣式修改

參數對應組件的id即editor
在這里插入圖片描述
我們這樣寫就可以了

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
但是博客列表那里顯示正文的時候,顯示了井號,我們可以不用顯示的

所以我們可以把博客列表和博客詳情返回的類分別處理一下

而且博客列表的內容可以不用顯示完全

在這里插入圖片描述

在這里插入圖片描述

這樣就好看多了
還有一個問題就是博客詳情頁的時候要用markdown的格式來展示

這個就是前端的問題了
用markdown來展示
這個可以去看官網來展示

在這里插入圖片描述
我們這樣寫
但是這樣寫是id選擇器
所以還要增加一個detail的id

在這里插入圖片描述

在這里插入圖片描述
所以前端這樣寫就可以了

在這里插入圖片描述

樣子好多了
但是markdown自己具有樣式
我們還要搞一下這個樣式

在這里插入圖片描述
我們自己去設置了背景
就不會去用markdown的樣式了
這個背景設置的是透明狀態
那么就默認會用父組件的背景

在這里插入圖片描述
這樣就正確了

編輯和刪除

顯示

因為我們登錄會顯示所有的博客
不管是不是自己寫的,都會顯示
所以當我們查看不是自己的博客的時候
就不要顯示刪除和編輯按鈕了

怎么判斷呢
就在博客詳情頁面
用返回的數據中的userId與登錄的useId進行判斷就可以了
不相等的話,就不顯示了

所以要求返回的數據中要有userId

在這里插入圖片描述
然后前端就可以判斷了

在這里插入圖片描述

OK了
記得還要把原來的按鈕刪掉

在這里插入圖片描述

成功了

后端

還是要創建新的類

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

前端

在這里插入圖片描述

這個沒有問題

在這里插入圖片描述

在這里插入圖片描述

這樣就OK了

對了
我們的刪除采用邏輯刪除

所以改一下

在這里插入圖片描述
這樣就OK了

在這里插入圖片描述

在這里插入圖片描述

還有一個問題就是有些時候不會顯示完全

是因為我們給contenet的賦值不規范

給markdown的賦值,不能這么草率

在這里插入圖片描述

這樣賦值才規范,就不會出現有些時候顯示,有些時候不顯示的問題了

加密加鹽

在這里插入圖片描述
對稱:就是加密與解密的密鑰是一樣的
非對稱:加密與解密的密鑰是不一樣的

公鑰是所有人都可以看到,鎖
私鑰就是我們可以看到,鑰匙

摘要算法:CRC算法,把一段字符串變成固定長度的字符串

在這里插入圖片描述
MD5就是摘要算法

在這里插入圖片描述
摘要算法是無法解密的
其他兩個可以解密

我們用MD5加密
非對稱效率比較低

在這里插入圖片描述

MD5加密,如果字符串很復雜就無法解密了
如果密碼簡單,就可以很容易解密了

所以要讓密碼變的復雜
所以可以加上隨機的字符串
這個就是鹽值
在這里插入圖片描述
在這里插入圖片描述

代碼測試

我們用的MD5是spring提供的

在這里插入圖片描述

在這里插入圖片描述
我們可以去解密軟件去解密一下
在這里插入圖片描述
使用同樣的字符串,加密出來的字符串都是一樣的

在這里插入圖片描述
在這里插入圖片描述
總共長度是32位,這個就是鹽值的長度
一般不會重復的
基本不會重復
極低的概率會重復

這個是根據用戶的mac地址去生成的uuid

明文與鹽值直接拼接就可以了

在這里插入圖片描述

在這里插入圖片描述
看得出來最后加出來的還是32位
這個是無法解密的
我們只需要存儲最后的密碼和鹽值就可以了

注意鹽值和最后的密文都是16進制的32位的

工具類

我們現在寫一個工具類
分別代表加密和解密

在這里插入圖片描述
這樣我們就成功了
數據庫存儲的就是鹽和密文

后端

我們沒有注冊操作
所以直接加密去修改數據庫

在這里插入圖片描述
在這里插入圖片描述
然后就是修改后端登錄代碼
只需要校驗就可以了

在這里插入圖片描述
登錄接口主要是修改這里
就是判斷密碼的那里

在這里插入圖片描述
我輸入的123456就成功了

在這里插入圖片描述

這樣就失敗了,問題主要是后端數據庫存儲的密碼沒有64位
在改一下

在這里插入圖片描述
這里密碼錯誤會拋出異常,然后被全局異常處理
這個ajax請求是失敗的
我們要處理一下前端
在這里插入圖片描述
在這里插入圖片描述

注意我們可以把這個我們自定義異常的狀態碼取消掉
這樣就是正常返回給前端了
前端就會sucess了,不會err了
因為如果設置為其他狀態碼
前端就會err
然后res可能就不是簡簡單單的Result了

總結

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896950.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896950.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896950.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Spring Boot 應用開發】-05 命令行參數

Spring Boot 常用命令行參數 Spring Boot 支持多種命令行參數&#xff0c;這些參數可以在啟動應用時通過命令行直接傳遞。以下是一些常用的命令行參數及其詳細說明&#xff1a; 1. 基本配置參數 --server.port端口號 指定應用程序運行的HTTP端口&#xff0c;默認為8080。 jav…

20250304學習記錄

第一部分&#xff0c;先來了解一下各種論文期刊吧&#xff0c;畢竟也是這把歲數了&#xff0c;還什么都不懂呢 國際期刊&#xff1a; EI收集的主要有兩種&#xff0c; JA&#xff1a;EI源刊 CA&#xff1a;EI會議 CPCI也叫 ISTP 常說的SCI分區是指&#xff0c;JCR的一區、…

2024 年 MySQL 8.0.40 安裝配置、Workbench漢化教程最簡易(保姆級)

首先到官網上下載安裝包&#xff1a;http://www.mysql.com 點擊下載&#xff0c;拉到最下面&#xff0c;點擊社區版下載 windows用戶點擊下面適用于windows的安裝程序 點擊下載&#xff0c;網絡條件好可以點第一個&#xff0c;怕下著下著斷了點第二個離線下載 雙擊下載好的安裝…

網絡安全檢查漏洞內容回復 網絡安全的漏洞

網絡安全的核心目標是保障業務系統的可持續性和數據的安全性&#xff0c;而這兩點的主要威脅來自于蠕蟲的暴發、黑客的攻擊、拒絕服務攻擊、木馬。蠕蟲、黑客攻擊問題都和漏洞緊密聯系在一起&#xff0c;一旦有重大安全漏洞出現&#xff0c;整個互聯網就會面臨一次重大挑戰。雖…

汽車智能鑰匙中PKE低頻天線的作用

PKE&#xff08;Passive Keyless Entry&#xff09;即被動式無鑰匙進入系統&#xff0c;汽車智能鑰匙中PKE低頻天線在現代汽車的智能功能和安全保障方面發揮著關鍵作用&#xff0c;以下是其具體作用&#xff1a; 信號交互與身份認證 低頻信號接收&#xff1a;當車主靠近車輛時…

uiautomatorviewer定位元素報Unexpected ... UI hierarchy

發現問題 借鑒博客 Unexpected error while obtaining UI hierarchy android app UI自動化-元素定位輔助工具 Unexpected error while obtaining UI hierarchy&#xff1a;使用uiautomatorviewer定位元素報錯 最近在做安卓自動化,安卓自動化主要工作之一就是獲取UI樹 app端獲…

通俗的方式解釋“零錢兌換”問題

“零錢兌換”是一道經典的算法題目&#xff0c;其主要問題是&#xff1a;給定不同面額的硬幣和一個總金額&#xff0c;求出湊成總金額所需的最少硬幣個數。如果沒有任何一種硬幣組合能組成總金額&#xff0c;返回-1。 解題思路 動態規劃&#xff1a;使用動態規劃是解決零錢兌…

GBT32960 協議編解碼器的設計與實現

GBT32960 協議編解碼器的設計與實現 引言 在車聯網領域&#xff0c;GBT32960 是一個重要的國家標準協議&#xff0c;用于新能源汽車與監控平臺之間的數據交互。本文將詳細介紹如何使用 Rust 實現一個高效可靠的 GBT32960 協議編解碼器。 整體架構 編解碼器的核心由三個主要組…

Halcon 車牌識別-超精細教程

車牌示例 流程: 讀取圖片轉灰度圖閾值分割,找車牌內容將車牌位置設置變換區域形狀找到中心點和弧度利用仿射變換,斜切車牌旋轉轉正,把車牌摳出來利用形態學操作拼接車牌號數字訓練ocr開始識別中文車牌 本文章用到的算子(解析) Halcon 算子-承接車牌識別-CSDN博客 rgb1_to_gray…

UDP透傳程序

UDP透傳程序 本腳本用于在 設備 A 和 設備 B 之間建立 UDP 數據轉發橋梁&#xff0c;適用于 A 和 B 設備無法直接通信的情況。 流程&#xff1a; A --> 電腦 (中繼) --> B B --> 電腦 (中繼) --> A 需要修改參數&#xff1a; B_IP “192.168.1.123” # 設備 B 的…

Holtek HT82V42A深度解析:CCD/CIS信號處理的集成化解決方案

——簡化圖像采集系統設計的終極利器 一、HT82V42A核心參數與外設資源 HT82V42A是Holtek專為圖像傳感器信號處理設計的模擬前端芯片&#xff0c;集成CCD/CIS信號處理與LED驅動功能&#xff0c;關鍵參數如下&#xff1a; 參數類別規格說明信號處理通道單通道CCD/CIS模擬信號輸…

詳細分析KeepAlive的基本知識 并緩存路由(附Demo)

目錄 前言1. 基本知識2. Demo2.1 基本2.2 拓展2.3 終極 3. 實戰 前言 &#x1f91f; 找工作&#xff0c;來萬碼優才&#xff1a;&#x1f449; #小程序://萬碼優才/r6rqmzDaXpYkJZF 基本知識推薦閱讀&#xff1a;KeepAlive知識點 從實戰中學習&#xff0c;源自實戰中vue路由的…

記一次誤禁用USB導致鍵盤鼠標失靈的修復過程

背景說明 在電腦上插入了一個USB hub&#xff0c;然后彈窗提示&#xff1a;“集線器端口上出現電涌”&#xff0c;點開讓選擇“重置”或者“關閉”&#xff0c;不小心點了關閉&#xff0c;結果這個usb口就被關了&#xff0c;再插任何東西都沒反應&#xff0c;找了很多辦法都恢…

小米手機如何錄制屏幕?手機、電腦屏幕錄制方法分享

大家最近有沒有遇到想記錄手機屏幕操作的情況&#xff1f; 比如精彩的游戲瞬間、有趣的視頻教程&#xff0c;或者需要錄制屏幕來制作演示材料。小米手機在這方面可是個好幫手&#xff0c;今天就來給你好好嘮嘮&#xff0c;小米手機如何錄制屏幕&#xff0c;以及后續如何處理這…

如何將JAR交由Systemctl管理?

AI越來越火了&#xff0c;我們想要不被淘汰就得主動擁抱。推薦一個人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;最重要的屌圖甚多&#xff0c;忍不住分享一下給大家。點擊跳轉到網站 廢話不多說&#xff0c;進入正題。下面開始說如何使用 systemctl…

chrome Vue.js devtools 提示不支持該擴展組件,移除

可能是版本不兼容&#xff0c;可以重新安裝&#xff0c;推薦網址極簡插件官網_Chrome插件下載_Chrome瀏覽器應用商店 直接搜索vue&#xff0c;下載舊版&#xff0c;vue2、vue3都支持&#xff0c;上面那個最新版本試了下&#xff0c;vue2的肯定是不能用

【RabbitMQ】RabbitMQ的核心概念與七大工作模式

&#x1f525;個人主頁&#xff1a; 中草藥 &#x1f525;專欄&#xff1a;【中間件】企業級中間件剖析 在現代分布式系統和微服務架構中&#xff0c;消息隊列&#xff08;Message Queue&#xff09; 是解決服務間通信、系統解耦和流量削峰的關鍵技術之一。而 RabbitMQ 作為一…

SQLAlchemy系列教程:理解SQLAlchemy元數據

SQLAlchemy是Python開發人員的強大ORM工具。SQLAlchemy中的元數據是對象-關系映射配置的集合&#xff0c;允許開發人員無縫地定義和使用數據庫模式。 使用元數據 SQLAlchemy中的元數據充當各種數據庫描述符&#xff08;如表、列和索引&#xff09;的容器。這使開發人員能夠通…

MacDroid for Mac v2.3 安卓手機文件傳輸助手 支持M、Intel芯片 4.7K

MacDroid 是Mac毒搜集到的一款安卓手機文件傳輸助手&#xff0c;在Mac和Android設備之間傳輸文件。您只需要將安卓手機使用 USB 連接到 Mac 電腦上即可將安卓設備掛載為本地磁盤&#xff0c;就像編輯mac磁盤上的文件一樣編輯安卓設備上的文件&#xff0c;MacDroid支持所有 Andr…

Android+SpringBoot的老年人健康飲食小程序平臺

感興趣的可以先收藏起來&#xff0c;還有大家在畢設選題&#xff0c;項目以及論文編寫等相關問題都可以給我留言咨詢&#xff0c;我會一一回復&#xff0c;希望幫助更多的人。 系統介紹 我將從經濟、生活節奏、技術融合等方面入手&#xff0c;詳細闡述居家養老管理模式興起的…