創建一個新的Spring Security應用程序,并使用JDBC連接數據庫

創建一個新的Spring Security應用程序,并使用JDBC連接數據庫

在這個教程中,我們將學習如何創建一個新的Spring Security應用程序,使用JDBC連接數據庫以獲取用戶信息并進行認證。我們還將學習如何配置Spring Security以從數據庫中獲取用戶和權限信息,并使其與不同的模式和數據源一起工作。

1. 初始化Spring Boot項目

首先,我們需要創建一個新的Spring Boot項目。可以通過訪問 start.spring.io 并設置組名和項目名來完成。選擇以下依賴項:

Spring Web Starter
Spring Security Starter
H2 Database(用于本視頻中的內存數據庫)
JDBC API(用于與數據庫交互)

2. 創建HomeResource類

創建一個HomeResource類,并在其中定義幾個API端點:

/home:公開的端點,任何人都可以訪問
/user:僅用戶或管理員可以訪問
/admin:僅管理員可以訪問

@RestController
public class HomeResource {@GetMapping("/")public String home() {return "Welcome to the home page!";}@GetMapping("/user")public String user() {return "Welcome to the user page!";}@GetMapping("/admin")public String admin() {return "Welcome to the admin page!";}
}
  1. 配置Spring Security
    創建一個SecurityConfiguration類,擴展WebSecurityConfigurerAdapter,以配置認證和授權。
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {@AutowiredDataSource dataSource;@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.jdbcAuthentication().dataSource(dataSource).usersByUsernameQuery("select username, password, enabled from users where username = ?").authoritiesByUsernameQuery("select username, authority from authorities where username = ?");}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/admin").hasRole("ADMIN").antMatchers("/user").hasAnyRole("USER", "ADMIN").antMatchers("/").permitAll().and().formLogin();}@Beanpublic PasswordEncoder passwordEncoder() {return NoOpPasswordEncoder.getInstance();}
}
  1. 配置數據庫和數據源
    在application.properties中配置H2數據庫和JDBC連接:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.h2.console.enabled=true
spring.datasource.initialization-mode=always

5. 創建數據庫模式和初始化數據

在src/main/resources目錄下創建schema.sql和data.sql文件,分別定義數據庫模式和初始化數據。

schema.sql:在這里插入代碼片

CREATE TABLE users (username VARCHAR(50) NOT NULL PRIMARY KEY,password VARCHAR(50) NOT NULL,enabled BOOLEAN NOT NULL
);CREATE TABLE authorities (username VARCHAR(50) NOT NULL,authority VARCHAR(50) NOT NULL,FOREIGN KEY (username) REFERENCES users(username)
);CREATE UNIQUE INDEX ix_auth_username ON authorities (username, authority);

data.sql:

INSERT INTO users (username, password, enabled) VALUES ('user', 'pass', true);
INSERT INTO users (username, password, enabled) VALUES ('admin', 'pass', true);INSERT INTO authorities (username, authority) VALUES ('user', 'ROLE_USER');
INSERT INTO authorities (username, authority) VALUES ('admin', 'ROLE_ADMIN');

6. 啟動應用并測試

啟動應用并訪問不同的端點:

訪問/,任何人都可以訪問
訪問/user,需要用戶或管理員角色
訪問/admin,需要管理員角色
輸入相應的用戶名和密碼進行測試,例如user/pass和admin/pass。

結論

通過以上步驟,我們創建了一個使用Spring Security和JDBC進行用戶認證的Spring Boot應用程序。我們還學習了如何配置數據庫和數據源,以及如何初始化數據庫模式和數據。在實際應用中,可以使用類似的方法連接到外部數據庫,并根據需要調整數據庫模式和數據源配置。
在這里插入圖片描述

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

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

相關文章

Vue3使用Composition API實現響應式

title: Vue3使用Composition API實現響應式 date: 2024/5/29 下午8:10:24 updated: 2024/5/29 下午8:10:24 categories: 前端開發 tags: Vue3CompositionRefsReactiveWatchLifecycleDebugging 1. 介紹 Composition API是Vue.js 3中新增的一組API,用于在組件中組…

SQL 語言:嵌入式 SQL 和動態 SQL

文章目錄 基本概述嵌入式 SQL動態 SQL總結 基本概述 嵌入式SQL和動態SQL是兩種在應用程序中嵌入和使用SQL語句的方法。它們都允許開發人員在編程語言中編寫SQL語句,以便在應用程序中執行數據庫操作。然而,這兩種方法在實現方式、性能和靈活性方面存在一…

Java數據結構與算法(紅黑樹)

前言 紅黑樹是一種自平衡二叉搜索樹,確保在插入和刪除操作后,樹的高度保持平衡,從而保證基本操作(插入、刪除、查找)的時間復雜度為O(log n)。 實現原理 紅黑樹具有以下性質: 每個節點要么是紅色&#…

go語言學習之旅之Go結構體

在Go語言中,結構體(struct)是一種用戶定義的數據類型,用于組合不同類型的數據項。結構體可以包含其他結構體或基本數據類型的字段。以下是關于Go語言結構體的基本知識: 定義結構體: package mainimport &…

Python 之微信指數小程序數據抓取

Fiddler安裝和設置 安裝 Fiddler 安裝包可以從這里獲取,如果失效了可以自己網上找一個安裝。 鏈接:https://pan.baidu.com/s/1N30BoDWm2_dBL8i8GRzK5g?pwd1znv 提取碼:1znv 然后就是點擊安裝就好了,沒什么好多說的。 啟用…

刷代碼隨想錄有感(83):貪心算法——最大子數組和

題干&#xff1a; 代碼&#xff1a; class Solution { public:int maxSubArray(vector<int>& nums) {int res INT_MIN;int count 0;for(int i 0; i < nums.size(); i){count nums[i];if(count > res) res count;if(count < 0)count 0;}return res;} …

【創作活動】探索 GPT-4o:下一代語言模型的技術革命

&#x1f604; 19年之后由于某些原因斷更了三年&#xff0c;23年重新揚帆起航&#xff0c;推出更多優質博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有堅忍不拔之志 &#x1f390; 個人CSND主頁——Mi…

HTTP報文

HTTP報文 報文流 HTTP報文是在HTTP引用程序之間發送的數據塊&#xff0c;這些數據塊以一種文本形式的元信息開頭&#xff0c;這些信息描述了報文的內容和含義&#xff0c;后面跟著可選的數據部分&#xff0c;這些報文在客戶端&#xff0c;服務器和代理之間流動。 報文流入源…

git更改本地項目關聯到新倉庫

刪除現在遠程關聯的倉庫 git remote rm origin鏈接新倉庫 git remote add origin url(需要關聯的新倉庫地址)代碼提交到遠程倉庫master分支 git push --set-upstream origin master本地分支更新同步至遠程倉庫 比如本地有dev分支 git push origin dev:dev

前端項目開發,3個HTTP請求工具

這一小節&#xff0c;我們介紹一下前端項目開發中&#xff0c;HTTP請求會用到的3個工具&#xff0c;分別是fetch、axios和js-tool-big-box中的jsonp請求。那么他們都有哪些小區別呢&#xff1f;我們一起來看一下。 目錄 1 fetch 2 axios 3 js-tool-big-box 的 jsonp 請求 …

拷貝構造、移動構造、拷貝賦值、移動賦值

最近在學習C的拷貝構造函數時發現一個問題&#xff1a;在函數中返回局部的類對象時&#xff0c;并沒有調用拷貝構造函數。針對這個問題&#xff0c;查閱了一些資料&#xff0c;這里記錄整理一下。 調用拷貝構造函數的三種情況&#xff1a; ① 用一個類去初始化另一個對象時&a…

【數據結構與算法 | 基礎篇 | 隊列篇】力扣102, 107

1. 力扣102 : 二叉樹的層序遍歷 (1). 題 給你二叉樹的根節點 root &#xff0c;返回其節點值的 層序遍歷 。 &#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 示例 1&#xff1a; 輸入&#xff1a;root [3,9,20,null,null,15,7] 輸出&#xff1a;[[3]…

對于高速信號完整性,一塊聊聊啊(18)

本文摘錄一篇Allegro進行后仿真的完整流程,可能allegro版本有點老,但整個過程還是描述比較詳細的。 目錄 1、獲取IBIS模型 1.1模型下載 1.2檢查IBIS模型 1.3IBIS轉換為DML 1.4保存DML模型 2、仿真準備 2.1疊層設置 2.2電源網格設置 2.3仿真庫配置 3、仿真 3.1拓撲…

刷爆leetcode第六期

題目一 用隊列實現棧 請你僅使用兩個隊列實現一個后入先出&#xff08;LIFO&#xff09;的棧&#xff0c;并支持普通棧的全部四種操作&#xff08;push、top、pop 和 empty&#xff09;。 實現 MyStack 類&#xff1a; void push(int x) 將元素 x 壓入棧頂。 int pop() 移除…

【漏洞復現】大華智能物聯綜合管理平臺 fastjson遠程代碼執行漏洞

0x01 產品簡介 大華ICC智能物聯綜合管理平臺對技術組件進行模塊化和松耦合&#xff0c;將解決方案分層分級&#xff0c;提高面向智慧物聯的數據接入與生態合作能力。 0x02 漏洞概述 由于大華智能物聯綜合管理平臺使用了存在漏洞的Fastson組件,未經身份驗讓的攻擊者可利用 /e…

M功能-支付平臺(六)

target&#xff1a;離開柬埔寨倒計時-217day 今天突然發現我在csdn居然把我ip屬地搞出來了&#xff0c;之前都沒注意到&#xff0c;哎 前言 M功能演示版本做到后期(也就是第二周的后面3天)真的很心酸&#xff0c;這邊安排的4后端后面都放棄了&#xff0c;覺得做不出來&#…

ARM-V9 RME(Realm Management Extension)系統架構之系統能力的內存隔離和保護

安全之安全(security)博客目錄導讀 目錄 一、內存隔離和保護 1、顆粒PAS過濾Granular PAS filtering 2、Cache的一致性維護 2.1 物理別名點 Point of Physical Aliasing (PoPA) 2.2 加密點 3、內存(DRAM)保護 3.1 內存加密和完整性 3.2 DRAM scrubbing 本博客探討 RME…

網絡編程 —— Http使用httpClient實現頁面爬蟲

先去找類型的a標簽 取出圖片所在網址 取出https://desk.3gbizhi.com/deskMV/438.html 搭建Form界面 Http類 public static HttpClient Client { get; } static Http() {HttpClientHandler handler new HttpClientHandler();//處理消息對象//ServerCertificateCustomValidat…

安卓手機APP開發___設置鬧鐘

安卓手機APP開發___設置鬧鐘 目錄 概述 設置不精確鬧鐘 在特定時間后發出鬧鐘 在特定時間范圍內觸發鬧鐘 以大致有規律的時間間隔響起重復鬧鐘 設置精確的鬧鐘 系統會在未來的某個精確時刻調用精確鬧鐘。 可能不需要精確鬧鐘的用例 設置精確鬧鐘的方法 系統資源消耗…

萬億應急國債項目之通信指揮類應急裝備多鏈路聚合通信設備在應急行業中的重要作用

萬億應急國債項目的推出&#xff0c;無疑是我國在應急領域的一次重大舉措。在這一宏大藍圖中&#xff0c;通信指揮類應急裝備的多鏈路聚合通信設備顯得尤為重要&#xff0c;其在應急行業中所發揮的作用&#xff0c;堪稱不可或缺的關鍵一環。 通信指揮是應急響應中的核心環節&a…