SpringSecurity6 | 自定義登錄頁面

公眾號封面

?作者簡介:大家好,我是Leo,熱愛Java后端開發者,一個想要與大家共同進步的男人😉😉
🍎個人主頁:Leo的博客
💞當前專欄: Java從入門到精通
?特色專欄: MySQL學習
🥭本文內容:SSpringSecurity6 | 自定義登錄頁面
📚個人知識庫 :知識庫,歡迎大家訪問

學習參考 :

  • 講師:孫帥老師
  • 課程:孫哥說SpringSecurity6

image-20231030235443828

1.前言

大家好,我是Leo哥🫣🫣🫣,接到上一節,我們學習通過SpringSecurity的一些自定義配置來完成我們自定義認證規則的一些需求。這篇文章我們主要來介紹一下如何自定義我的登錄頁面。好了,話不多說讓我們開始吧😎😎😎。

2.環境配置

首先先說明一下我們的環境配置和技術要求,我們還是會創建一個新的SpringBoot工程,對其進行一些自定義配置。

因為我們要自定義我們的登錄頁面,所以我們這里會用到一種后端模版引擎–>Thyemleaf。如果對Thyemleaf還不了解的同學,可以參考我這篇文章。

3.自定義登錄頁面

3.1 導入依賴

在我們的pom.xml文件中導入ThymeLeaf依賴。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

3.2 創建login.html

并制定xml:th的映射,這里是為了可以在HTML中使用ThymeLeaf語法。

<!DOCTYPE html>
<html lang="en" xml:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Login Page</title><style>body {font-family: Arial, sans-serif;background-color: #f4f4f4;margin: 0;padding: 0;display: flex;justify-content: center;align-items: center;height: 100vh;}.login-container {background-color: #fff;padding: 20px;border-radius: 5px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);}.form-group {margin-bottom: 15px;}.form-group label {display: block;margin-bottom: 5px;}.form-group input {width: 100%;padding: 10px;border: 1px solid #ddd;border-radius: 5px;box-sizing: border-box; /* ensures padding doesn't affect width */}.form-group input[type="submit"] {background-color: #5c79b8;color: white;cursor: pointer;}.form-group input[type="submit"]:hover {background-color: #4cae97;}</style>
</head>
<body>
<div class="login-container"><h2>登錄頁面</h2><form><div class="form-group"><label for="username">用戶名:</label><input type="text" id="username" name="name" required></div><div class="form-group"><label for="password">密碼:</label><input type="password" id="password" name="passwd" required></div><div class="form-group"><input type="submit" value="Log In"></div></form>
</div>
</body>
</html>

簡單在瀏覽器,看看我們簡易的登錄界面吧。

image-20231209211629716

3.3 配置

那我們如何將他配置為我們SpringSecurity的登錄頁面呢,通過以下配置。

首先我們在后端編寫一個controller請求,也就是返回我們自定義的登錄頁面。

image-20231209212008381

注意:這里一定不要寫成@RestController了,因為我們不需要向前端返回JSON數據哈。

然后我們在SpringSecurity的配置類進行配置我們的自定義登錄頁面。

image-20231209212732990

然后啟動項目,訪問hello接口。

但是我們發現一個問題,此時我們輸入我們的用戶名和密碼卻不能登錄,而是會在瀏覽器進行刷新,我們接著往下看。

那么是怎么回事呢,此時我們需要回顧一下我們之前學習的知識,也就是我能當時查看表單登錄的整合流程。

image-20231205201036604

他會調用 HttpSecurity 類的 formLogin() 方法,在該方法中創建 FormLoginConfigurer 類的實例,并指定處理認證的 Filter 進行認證:

image-20231205202326832

然后又去new了一個FormLoginConfigurer(),然后去調用父類的構造方法區new這個類

image-20231205202413310

image-20231209213412137

我們在UsernamePasswordAuthenticationFilter類中中的**attemptAuthentication()**方法中可以看到他的一些要求。

首先必須是POST請求,然后用戶名的屬性必須是username,密碼的屬性是password。

按照上面的解讀,我們來按照規則改善一下我們的登錄頁面。

image-20231209214100245

還需要對我們的配置類做一些改變,這里的登錄的url要和我們前端請求的保持一致。

image-20231209214135705

然后啟動項目,再次訪問。

Leo-2023-12-09-21-45-16

當然還有另外一種方式實現是通過Java配置類的方式,而不是更改name屬性值。我們這里簡單介紹一下。

image-20231209214829879

4.總結

以上便是本文的全部內容,本人才疏學淺,文章有什么錯誤的地方,歡迎大佬們批評指正!我是Leo,一個在互聯網行業的小白,立志成為更好的自己。

如果你想了解更多關于Leo,可以關注公眾號-程序員Leo,后面文章會首先同步至公眾號。

公眾號封面

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

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

相關文章

高工氫電年會 | 未勢能源解超朋博士受邀出席并做主題演講

12月4日&#xff0c;以“戰略重構 商業覺醒”為主題的2023高工氫電年會在深圳舉辦&#xff0c;未勢能源副總裁解超朋博士受邀出席開幕式論壇&#xff0c;以《把握機遇、直面挑戰&#xff0c;迎接氫車規模化推廣時代》為主題發表演講&#xff0c;并參與圓桌論壇研討。 氫勢已來&…

【Linux】resolv.conf 文件

resolv.conf resolv.conf 文件 是 DNS 的 client 端使用的文件&#xff0c;用于設置 DNS 服務器的 ip 地址以及 DNS 域名&#xff0c;還可以配置域名搜索順序等等。主要包含如下關鍵字&#xff1a;nameserver、domain、search、sortlist、options。設置的格式都是 關鍵字空格 …

管理類聯考——數學——真題篇——按知識分類——數據

文章目錄 排列組合2023真題&#xff08;2023-05&#xff09;-數據分析-排列組合-組合-C運算-至少-需反面思考真題&#xff08;2023-08&#xff09;-數據分析-排列組合-相鄰不相鄰-捆綁法插空法-插空法注意空位比座位多1個&#xff0c;是用A&#xff1b;捆綁法內部排序用A&#…

Linux(centos, ubuntu) 快速安裝anaconda;5秒安裝anaconda

1.下載Anaconda安裝腳本: 首先&#xff0c;訪問Anaconda的官方下載頁面&#xff1a;https://www.anaconda.com/products/distribution 在頁面上&#xff0c;選擇適用于Linux的Python 3.x版本的Anaconda安裝腳本。也可以使用wget或curl命令從終端下載。示例&#xff1a; wget …

2023中國(海南)國際高爾夫旅游文化博覽會 暨國際商界峰層·全球華人高爾夫精英巡回賽 全國潁商自貿港行盛大啟幕

2023中國&#xff08;海南&#xff09;國際高爾夫旅游文化博覽會&#xff08;以下簡稱“海高博”&#xff09;暨全國潁商走進海南自貿港于12月7-9日在海口觀瀾湖盛大開幕。該活動由中國國際貿易促進委員會海南省委員會、海南省旅游和文化廣電體育廳主辦&#xff0c;中國國際商會…

C語言中getchar函數

在 C 語言中&#xff0c;getchar() 是一個標準庫函數&#xff0c;用于從標準輸入&#xff08;通常是鍵盤&#xff09;讀取單個字符。它的函數原型如下&#xff1a; int getchar(void);getchar() 函數的工作原理如下&#xff1a; 當調用 getchar() 函數時&#xff0c;它會等待…

最新版本11.17的YOLOv8加入注意力方法

本文基于11.17版本,以往版本略有不同,可查看改進YOLOv8,教你YOLOv8如何添加20多種注意力機制進行參考 放入注意力代碼,以biformer注意力為例 import torch import torch.nn as nn import torch.nn.functional as Fdef position(H, W, is_cuda=

探索 Python 中鏈表的實現:從基礎到高級

# 更多資料獲取 &#x1f4da; 個人網站&#xff1a;ipengtao.com 鏈表是一種基礎的數據結構&#xff0c;它由一系列節點組成&#xff0c;每個節點都包含數據和指向下一個節點的引用。在Python中&#xff0c;可以使用類來實現鏈表&#xff0c;本文將介紹如何實現鏈表&#xff…

c語言編程題經典100例——(90~95例)

1,寫一個函數&#xff0c;實現數字的加密和解密。 下面是一個簡單的C語言函數&#xff0c;可以實現數字的加密和解密。這個函數采用簡單的加密算法&#xff0c;將輸入的數字乘以一個固定的密鑰&#xff0c;然后加上一個固定的偏移量。解密過程就是將加密后的數字減去偏移量&am…

《C++新經典設計模式》之第18章 備忘錄模式

《C新經典設計模式》之第18章 備忘錄模式 備忘錄模式.cpp 備忘錄模式.cpp #include <iostream> #include <vector> #include <memory> using namespace std;// 保存對象內部狀態&#xff0c;必要時恢復 // 在不破壞封裝性的前提下&#xff0c;捕獲對象的內部…

(C)一些題11

1. #include<stdio.h> #include<string.h> void main() { char *s1"ABCDEF"&#xff0c;*s2"aB"&#xff1b; s1; s2; puts(s1)&#xff1b; puts(s2)&#xff1b; printf("%d\n",strcmp(s1,s2))&#xff1b; } 答案&#xff1…

【密碼學引論】認證

認證是許多應用系統中安全保護的第一道設防認證和加密的區別&#xff1a;加密用來確保數據的保密性&#xff0c;而認證用來確保報文發送者和接受者的真實性和報文的完整性。認證和數字簽名的區別&#xff1a; 認證總是基于某種收發雙方共享的保密數據來認證被鑒別對象的真實性&…

關于linux開機自啟動

1、系統啟動流程 2、 init、 inittab、 init.d、 rcx.d /etc/inittab是Linux系統中的一個配置文件&#xff0c;用于定義系統的運行級別和相應的操作。其語法格式如下&#xff1a; 標簽&#xff1a;運行級別&#xff1a;操作&#xff1a;進程 label:runlevel:action:process下面…

每天一點python——day90

#每天一點Python——90 #類的創建 創建類的語法&#xff1a; class 類名&#xff1a;pass【縮進之后寫類里面的內容】 [類里面寫什么沒有想好之前&#xff0c;可以用pass進行占位.可以不報錯]#演示&#xff1a; class Lei:pass #以上就上一個類被創建的樣例注意事項&#xff1a…

PHP基礎 - 注釋變量

一. 語言開始標識 在PHP中,文件的開頭需要使用語言開始標識來指定該文件是PHP代碼。標識通常為"<?php",也可以是"<?",但建議使用"<?php"以確保代碼的兼容性和可讀性。 <?php // PHP代碼從這里開始寫 二. PHP注釋 注釋是用…

[英語學習][11][Word Power Made Easy]的精讀與翻譯優化

[序言] 這次翻譯, 譯者有點點水平. 有些比較難表達的, 都能正確地翻譯出來. 但有點很奇怪, 難的地方譯者翻譯正確, 容易的地方又錯了. [英文學習的目標] 提升自身的英語水平, 對日后編程技能的提升有很大幫助. 希望大家這次能學到東西, 同時加入我的社區討論與交流英語相關的…

遇到這個問題怎么辦

1. 問題現象 話說近日博主的團隊中&#xff0c;有一個小盆友遇到了一個問題&#xff0c;即使用RSA進行加解密的時候&#xff0c;拋異常了&#xff1a; java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: DerInputStream.getLeng…

高防CDN:在保障服務器與網站成本的角度的智慧選擇

隨著網絡攻擊的不斷升級和演變&#xff0c;保障服務器與網站安全成為了企業不可忽視的重要問題。高防CDN&#xff08;內容分發網絡&#xff09;技術應運而生&#xff0c;為服務器與網站的穩定運行提供了全面而有效的保護。本文將從服務器與網站成本的角度深入分析高防CDN在降低…

【Python】Faker庫詳解:創建測試數據輕而易舉

Python Faker庫詳解&#xff1a;創建測試數據輕而易舉 在軟件開發和測試過程中&#xff0c;通常需要大量的測試數據來模擬真實環境。Python的Faker庫為開發者提供了一個方便、靈活且強大的工具&#xff0c;用于生成各種虛構數據。本文將深入介紹Faker庫&#xff0c;演示其基本…

十一、了解分布式計算

1、什么是&#xff08;數據&#xff09;計算&#xff1f; 2、分布式(數據)計算 &#xff08;1&#xff09;概念 顧名思義&#xff0c;分布式計算&#xff0c;即以分布式的形式完成數據的統計&#xff0c;得到需要的結果。 分布式數據計算&#xff0c;顧名思義&#xff0c;就是…