14.Spring Boot 3.1.5 集成 Spring Security 進行訪問控制

14.Spring Boot 3.1.5 集成 Spring Security 進行訪問控制

Spring Security 是一個強大且高度可定制的認證和訪問控制框架,專為基于 Spring 的應用程序設計。它為基于 Java EE 的企業應用程序提供了全面的安全解決方案,包括 Web 應用程序安全和方法級安全性。

Spring Security 的工作流程通常包括以下幾個步驟:

攔截請求:通過過濾器鏈攔截所有進入應用程序的請求。
認證用戶:如果請求需要認證,Spring Security 會引導用戶到登錄頁面,并驗證用戶提供的憑據。
授權訪問:認證成功后,Spring Security 檢查用戶是否有權訪問請求的資源。
處理請求:如果用戶有權限,請求將被處理;否則,用戶將被拒絕訪問。

1. 創建 Spring Boot 項目

  1. 新建項目
    • 打開 IntelliJ IDEA,選擇 File → New → Project
    • 選擇 Maven,填寫項目名稱(如 demo),選擇合適的 JDK 版本(建議 17),點擊 Next
    • 輸入 GroupId(如 com.example)和 ArtifactId(如 demo),選擇打包方式為 jar,點擊 Next
    • 點擊 Finish 完成項目創建。

2. 配置 pom.xml

pom.xml 中添加 Spring Boot 3.1.5 父依賴和 Spring Security 依賴:
在 pom.xml 中引入 Spring Security 依賴后,默認情況下會攔截所有請求,但 Spring Security 提供了一些默認配置和機制來處理這些請求。以下是默認行為的詳細說明:

默認攔截行為
攔截所有請求:Spring Security 默認會攔截所有進入應用的 HTTP 請求,要求用戶進行認證后才能訪問受保護的資源。
默認登錄頁面:如果用戶未登錄而嘗試訪問受保護的資源,Spring Security 會自動重定向到默認的登錄頁面(路徑為 /login)。
默認用戶名和密碼:首次啟動應用時,Spring Security 會生成一個默認的用戶名(user)和一個隨機密碼,并在控制臺輸出這些信息。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>Demo project for Spring Boot with Spring Security</description><!-- Spring Boot 3.1.5 父依賴 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.5</version><relativePath/> <!-- lookup parent from repository --></parent><properties><java.version>17</java.version> <!-- Spring Boot 3.x 需要 Java 17 --></properties><dependencies><!-- Spring Web 依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Security 依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency></dependencies><build><plugins><!-- Spring Boot Maven 插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

3. 創建 Spring Boot 啟動類

src/main/java 下創建包(如 com.example.demo),并創建 DemoApplication.java

package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

在這里插入圖片描述

4. 創建 Security 配置類

在相同的包下創建 SecurityConfig.java,用于配置 Spring Security:

package com.example.demo;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;/*** Spring Security 配置類* 該類用于配置 Spring Security 的安全規則、用戶認證和授權。*/
@Configuration
@EnableWebSecurity
public class SecurityConfig {/*** 配置安全過濾器鏈,定義請求的安全規則。** @param http HttpSecurity 對象,用于配置 HTTP 請求的安全規則。* @return 配置好的 SecurityFilterChain 對象。* @throws Exception 如果配置過程中出現錯誤。*/@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http// 配置請求的授權規則.authorizeHttpRequests(authorize -> authorize// 允許所有人訪問 /public/** 路徑下的請求.requestMatchers("/public/**").permitAll()// 其他所有請求都需要認證.anyRequest().authenticated())// 配置表單登錄.formLogin(form -> form// 允許所有人訪問登錄頁面.permitAll())// 配置注銷功能.logout(logout -> logout// 允許所有人訪問注銷功能.permitAll());// 返回構建好的 SecurityFilterChainreturn http.build();}/*** 配置用戶詳細信息服務,用于提供用戶認證的信息。* 這里使用內存中的用戶存儲,實際應用中可以替換為數據庫或其他用戶存儲。** @return 配置好的 UserDetailsService 對象。*/@Beanpublic UserDetailsService userDetailsService() {// 創建一個內存中的用戶UserDetails user = User.builder()// 設置用戶名.username("user")// 設置密碼,使用 PasswordEncoder 對密碼進行加密.password(passwordEncoder().encode("password"))// 設置用戶角色.roles("USER")// 構建用戶對象.build();// 返回內存用戶管理器,用于管理用戶信息return new InMemoryUserDetailsManager(user);}/*** 配置密碼編碼器,用于對用戶密碼進行加密和解密。** @return 配置好的 PasswordEncoder 對象。*/@Beanpublic PasswordEncoder passwordEncoder() {// 返回 BCrypt 密碼編碼器return new BCryptPasswordEncoder();}
}

在這里插入圖片描述

5. 創建控制器

在相同的包下創建 HelloController.java,提供一個簡單的受保護端點:

package com.example.demo;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@GetMapping("/hello")public String sayHello() {return "Hello, Spring Security!";}@GetMapping("/public/hello")public String sayHelloPublic() {return "Hello, Public!";}
}

在這里插入圖片描述

6. 運行和測試

  1. 啟動應用
    • 右鍵點擊 DemoApplication.java,選擇 Run,或點擊類名旁邊的綠色箭頭。
      在這里插入圖片描述
  2. 測試接口
    • 打開瀏覽器,訪問 http://localhost:8080/public/hello,頁面應返回 Hello, Public!
      在這里插入圖片描述
    • 訪問 http://localhost:8080/hello,將會被重定向到登錄頁面。
      在這里插入圖片描述
    • 使用用戶名 user 和密碼 password 登錄,登錄成功后,訪問 http://localhost:8080/hello,頁面應返回 Hello, Spring Security!
      在這里插入圖片描述

總結

通過以上步驟,已經成功創建了一個簡單的 Spring Boot 應用,并集成了 Spring Security 進行基本的認證和授權。此示例中,創建了一個受保護的端點 /hello 和一個公共端點 /public/hello。Spring Security 確保只有經過身份驗證的用戶才能訪問受保護的端點。

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

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

相關文章

Linux學習筆記(二):Linux權限管理

文章目錄 一、Linux下用戶的分類1. Linux下用戶分為兩類&#xff1a;2. 這兩類用戶如何進行切換呢&#xff1f;3. 短暫提權 二、何為權限1. 什么是權限2. Linux的文件后綴意義 三、修改權限1. 設置文件的訪問權限——chmod2. 修改文件擁有者——chown3. 修改文件所屬組——chgr…

學習alpha,第2個alpha

alphas (-1 * ts_corr(rank(ts_delta(log(volume), 2)), rank(((close - open) / open)), 6)) 先分析操作符從左到右 ts_corr: Pearson 相關度量兩個變量之間的線性關系。當變量呈正態分布且關系呈線性時&#xff0c;它最有效。 ts_corr(vwap, close, 20)是一個計算時間序列相…

Paddle Serving|部署一個自己的OCR識別服務器

前言 之前使用C部署了自己的OCR識別服務器&#xff0c;Socket網絡傳輸部分是自己寫的&#xff0c;回過頭來一看&#xff0c;自己犯傻了&#xff0c;PaddleOCR本來就有自己的OCR服務器項目&#xff0c;叫PaddleServing&#xff0c;這里記錄一下部署過程。 1 下載依賴環境 1.1 …

React Native【詳解】搭建開發環境,創建項目,啟動項目

下載安裝 node https://nodejs.cn/download/ 查看 npx 版本 npx -v若無 npx 則安裝 npm install -g npx創建項目 npx create-expo-applatestRN_demo 為自定義的項目名稱 下載安裝 Python 2.7 下載安裝 JAVA JDK https://www.oracle.com/java/technologies/downloads/#jdk24-…

NVIDIA Halos:智能汽車革命中的全棧式安全系統

高級輔助駕駛行業正面臨一個尷尬的"安全悖論"——傳感器數量翻倍的同時&#xff0c;事故率曲線卻遲遲不見明顯下降。究其原因&#xff0c;當前行業普遍存在三大技術困局&#xff1a; 碎片化安全方案 傳統方案就像"打補丁"&#xff0c;激光雷達廠商只管點云…

數據資產管理與AI融合:物聯網時代的新征程

一、引言 在當今數字化浪潮席卷全球的時代&#xff0c;數據資產已成為企業和組織的核心競爭力之一。隨著物聯網&#xff08;IoT&#xff09;技術的飛速發展&#xff0c;海量的數據如潮水般涌來&#xff0c;如何高效地管理和利用這些數據資產成為了亟待解決的問題。與此同時&am…

MySQL 表的內外連接

文章目錄 表的內外連接&#xff08;重點&#xff09;內連接外連接左外連接右外連接 表的內外連接&#xff08;重點&#xff09; 內連接 內連接實際上就是利用where子句對兩種表形成的笛卡兒積進行篩選&#xff0c;我們前面學習的查詢都是內連接&#xff0c;也是在開發過程中使…

VTK 交互類介紹

基本概念 交互器(Interactor): 處理用戶輸入事件的基礎類 交互樣式(InteractorStyle): 定義具體的交互行為 Widgets: 可交互的UI組件,如滑塊、按鈕等 Picker: 用于選擇場景中的對象 常用交互類 類名功能描述vtkRenderWindowInteractor渲染窗口交互器vtkInteractorStyle交互樣式…

C語言動態庫與靜態庫編譯測試示例詳細介紹終結篇

C語言動態庫與靜態庫編譯鏈接時的詳細對比與示例 下面我將提供更詳細的示例&#xff0c;并通過對比表格清晰地展示靜態庫和動態庫的特性差異以及它們之間的各種鏈接關系。 ## 1. 靜態庫與動態庫特性對比 | 特性 | 靜態庫(.a/.lib) | 動態…

神經網絡:節點、隱藏層與非線性學習

神經網絡&#xff1a;節點、隱藏層與非線性學習 摘要&#xff1a; 神經網絡是機器學習領域中一種強大的工具&#xff0c;能夠通過復雜的結構學習數據中的非線性關系。本文從基礎的線性模型出發&#xff0c;逐步深入探討神經網絡中節點和隱藏層的作用&#xff0c;以及它們如何…

POI創建Excel文件

文章目錄 1、背景2、創建表格2.1 定義表頭對象2.2 Excel生成器2.3 創建模板2.4 處理Excel表頭2.5 處理Excel內容單元格樣式2.6 處理單個表頭 3、追加sheet4、靜態工具5、單元測試6、完整代碼示例 1、背景 需求中有需要用戶自定義Excel表格表頭&#xff0c;然后生成Excel文件&a…

【分布式系統中的“瑞士軍刀”_ Zookeeper】三、Zookeeper 在實際項目中的應用場景與案例分析

在分布式系統日益復雜的當下&#xff0c;Zookeeper 憑借強大的協調能力成為眾多項目的關鍵組件。本篇文章將結合實際項目場景&#xff0c;詳細介紹 Zookeeper 在電商秒殺、微服務架構、分布式配置管理以及大數據處理集群等領域的應用&#xff0c;以及在不同的案例場景下的具體分…

【翻譯、轉載】MCP 提示 (Prompts)

原文地址&#xff1a;https://modelcontextprotocol.io/docs/concepts/prompts#python 提示 (Prompts) 創建可重用的提示模板和工作流 提示 (Prompts) 使服務器能夠定義可重用的提示模板和工作流&#xff0c;客戶端可以輕松地將其呈現給用戶和 LLM。它們提供了一種強大的方式來…

accept() reject() hide()

1. accept() 用途 確認操作&#xff1a;表示用戶完成了對話框的交互并確認了操作&#xff08;如點擊“確定”按鈕&#xff09;。 關閉模態對話框&#xff1a;結束 exec() 的事件循環&#xff0c;返回 QDialog::Accepted 結果碼。適用場景 模態對話框&#xff08;通過 exec()…

如何查看電腦IP地址和歸屬地:全面指南

在數字化時代&#xff0c;了解自己電腦的IP地址和歸屬地信息變得越來越重要。無論是進行網絡故障排查、遠程辦公設置&#xff0c;還是出于網絡安全考慮&#xff0c;掌握這些基本信息都很有必要。本文將詳細介紹如何查看電腦的公網IP、內網IP以及歸屬地信息&#xff0c;并提供常…

基于python生成taskc語言文件--時間片輪詢

目錄 前言 utf-8 chinese GB2312 utf-8 排除task.c chinese GB2312 排除task.c 運行結果 前言 建議是把能正常工作的單個功能函數放到一起&#xff08;就和放while函數里的程序一樣&#xff09;&#xff0c;程序會按順序自動配置。 不同的格式已經對應給出。 utf-8 impo…

Docker手動重構Nginx鏡像,融入Lua、Redis功能

核心內容&#xff1a;Docker重構Nginx鏡像&#xff0c;融入Lua、Redis功能 文章目錄 前言一、準備工作1、說明2、下載模塊3、Nginx配置文件3、Dockerfile配置文件3、準備工作全部結束 二、構建鏡像三、基于鏡像創建容器三、lua腳本的redis功能使用總結 前言 ???? ????…

DeepSeek+Excel:解鎖辦公效率新高度

目錄 一、引言&#xff1a;Excel 遇上 DeepSeek二、認識 DeepSeek&#xff1a;大模型中的得力助手2.1 DeepSeek 的技術架構與原理2.2 DeepSeek 在辦公場景中的獨特優勢 三、DeepSeek 與 Excel 結合的準備工作3.1 獲取 DeepSeek API Key3.2 配置 Excel 環境 四、DeepSeekExcel 實…

解決Vue2------You may use special comments to disable some warnings.問題

問題截圖 解決辦法 打開項目中.eslintrc.js在rules中&#xff0c;添加以下代碼&#xff0c;并extends的 vue/standard注釋掉 space-before-function-paren: 0, semi: off, quotes : off, comma-dangle : off, vue/comment-directive: off

數據集-目標檢測系列- 牙刷 檢測數據集 toothbrush >> DataBall

數據集-目標檢測系列- 牙刷 檢測數據集 toothbrush >> DataBall DataBall 助力快速掌握數據集的信息和使用方式。 貴在堅持&#xff01; * 相關項目 1&#xff09;數據集可視化項目&#xff1a;gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/over…