最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

最新Spring Security實(shí)戰(zhàn)教程之Spring Security安全框架指南

 更新時(shí)間:2025年03月19日 14:44:56   作者:Micro麥可樂(lè)  
SpringSecurity是Spring生態(tài)系統(tǒng)中的核心組件,提供認(rèn)證、授權(quán)和防護(hù)機(jī)制,以保護(hù)應(yīng)用免受各種安全威脅,它支持多種認(rèn)證方式,并通過(guò)攔截器和過(guò)濾器鏈進(jìn)行安全檢查,本文通過(guò)搭建SpringBoot+SpringSecurity項(xiàng)目,幫助如何快速上手并應(yīng)用SpringSecurity,感興趣的朋友一起看看吧

前言

隨著Web應(yīng)用和微服務(wù)架構(gòu)的普及,作為JAVA開(kāi)發(fā)者如何保證系統(tǒng)免受各種安全威脅(如未經(jīng)授權(quán)的訪問(wèn)、數(shù)據(jù)泄露、跨站請(qǐng)求偽造等)成為一個(gè)我們必須要解決的問(wèn)題。

Spring Security 作為Spring 生態(tài)系統(tǒng)中的核心組件,通過(guò)提供認(rèn)證(Authentication)與授權(quán)(Authorization)和針對(duì)常見(jiàn)攻擊等一系列安全功能,為開(kāi)發(fā)者構(gòu)建安全穩(wěn)定的應(yīng)用提供了強(qiáng)有力的支持。

什么是Spring Security?

官方文檔:https://docs.spring.io/spring-security/reference/index.html

Spring Security是一個(gè)基于Spring框架的強(qiáng)大安全解決方案,它為應(yīng)用提供了一整套安全服務(wù),主要包括以下幾個(gè)方面:

  • 認(rèn)證(Authentication): 確定訪問(wèn)者身份的過(guò)程。Spring Security通過(guò)多種方式(如表單登錄、Basic認(rèn)證、OAuth2等)實(shí)現(xiàn)用戶(hù)身份驗(yàn)證。
  • 授權(quán)(Authorization): 根據(jù)用戶(hù)身份和權(quán)限確定資源訪問(wèn)級(jí)別。開(kāi)發(fā)者可以通過(guò)配置或注解的方式,靈活地控制不同用戶(hù)對(duì)不同資源的訪問(wèn)權(quán)限。
  • 防護(hù)機(jī)制: 包括防止跨站請(qǐng)求偽造(CSRF)、點(diǎn)擊劫持等攻擊手段,保障應(yīng)用在網(wǎng)絡(luò)攻擊面前的穩(wěn)定性。

這種以攔截器和過(guò)濾器鏈為核心的設(shè)計(jì),使得Spring Security能夠在請(qǐng)求到達(dá)業(yè)務(wù)邏輯之前,先進(jìn)行安全檢查,從而構(gòu)建出一層堅(jiān)固的防護(hù)屏障。

同類(lèi)框架對(duì)比

說(shuō)到安全框架,我們就不得不提另外一個(gè)輕量級(jí)的安全管理框架 Apache Shiro ,它有三個(gè)核心組件:Subject, SecurityManagerRealms , Shiro 的相關(guān)內(nèi)容大家可以自行學(xué)習(xí),這里不做過(guò)多介紹了

下面博主總結(jié)兩個(gè)框架的一些對(duì)比:

特性Spring SecurityApache Shiro
學(xué)習(xí)曲線較陡峭易上手
功能完整性★★★★★★★★☆☆
Spring生態(tài)集成原生支持需要適配
微服務(wù)支持OAuth2/JWT需自行擴(kuò)展
社區(qū)活躍度極高一般

通過(guò)上述的對(duì)比圖,可以總結(jié)出:

  • Spring Security是一個(gè)重量級(jí)的安全管理框架;Shiro則是一個(gè)輕量級(jí)的安全管理框架
  • Spring Security 上手稍有難度,Shiro 的配置和使用比較簡(jiǎn)單
  • Shiro 依賴(lài)性低,不需要任何框架和容器,可以獨(dú)立運(yùn)行
  • 如果你的項(xiàng)目基于Spring容器,那么優(yōu)先推薦Spring Security

Spring Security典型應(yīng)用場(chǎng)景

傳統(tǒng)Web應(yīng)用安全

通過(guò)配置實(shí)現(xiàn)URL級(jí)權(quán)限控制

@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/admin/**").hasRole("ADMIN")
                .anyRequest().authenticated()
            )
            .formLogin(form -> form
                .loginPage("/login")
                .permitAll()
            );
        return http.build();
    }
}

前后端分離架構(gòu)

  • JWT令牌自動(dòng)校驗(yàn)
  • 無(wú)狀態(tài)會(huì)話管理
  • 跨域安全配置(CORS)

微服務(wù)安全網(wǎng)關(guān)

資源服務(wù)器配置示例

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: http://auth-server:9000

快速搭建安全環(huán)境

以博主本機(jī)環(huán)境為例

JDK 17+
Spring Boot 3.4.3
Maven 3.9+
IDE(IntelliJ IDEA或VS Code)

為了方便大家學(xué)習(xí)給大家提供一個(gè)官方代碼案例地址:
https://github.com/spring-projects/spring-security-samples/tree/main

? 創(chuàng)建Spring Boot項(xiàng)目

使用 start.spring.io 生成項(xiàng)目,勾選以下依賴(lài):

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
</dependencies>

? 測(cè)試安全訪問(wèn)

創(chuàng)建測(cè)試控制器,我們希望訪問(wèn) /public 無(wú)需驗(yàn)證身份,訪問(wèn) /private 需要用戶(hù)登錄

@RestController
public class DemoController {
    @GetMapping("/public")
    public String publicApi() {
        return "無(wú)需認(rèn)證的公開(kāi)接口";
    }
    @GetMapping("/private")
    public String privateApi() {
        return "需要登錄的私有接口";
    }
}

現(xiàn)在我們不管訪問(wèn)哪一個(gè)接口地址,均會(huì)跳出一個(gè)登陸頁(yè)

賬號(hào)默認(rèn) user ,密碼由Spring Security 自動(dòng)幫我們生成,觀察控制臺(tái)

? 實(shí)現(xiàn)URL身份驗(yàn)證

通過(guò)上述測(cè)試要求,目前我們?cè)L問(wèn) /public 還是會(huì)出現(xiàn)登錄要求,接下來(lái)我們創(chuàng)建一個(gè)陪你類(lèi),以實(shí)現(xiàn)這個(gè)需求

@Configuration
public class BasicSecurityConfig {
    // 配置安全策略
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.
                authorizeHttpRequests(authorize -> authorize
                        .requestMatchers("/public/**").permitAll()
                        .anyRequest().authenticated()
                )
                .formLogin(withDefaults())
                .logout(withDefaults());
        return http.build();
    }
}

現(xiàn)在我們繼續(xù)訪問(wèn) /public 發(fā)現(xiàn)已經(jīng)不再需要身份驗(yàn)證了,可以直接訪問(wèn)測(cè)試

訪問(wèn) /private 需要登錄驗(yàn)證,登陸后即可訪問(wèn)

上述配置文件中

requestMatchers(“/public/**”).permitAll() 表明放行public訪問(wèn)路徑下所有接口
formLogin(withDefaults()) 采用默認(rèn)的登錄處理
logout(withDefaults()) 采用默認(rèn)的登出處理

結(jié)語(yǔ)

本章節(jié)主要帶領(lǐng)大家認(rèn)識(shí)Spring Security安全框架,并構(gòu)建一個(gè)簡(jiǎn)單的 Spring Boot + Spring Security 的項(xiàng)目讓大家有一個(gè)大致了解。

在接下來(lái)的專(zhuān)欄中,我們將逐步深入 Spring Security 的各個(gè)技術(shù)細(xì)節(jié),帶你從入門(mén)到精通,全面掌握這一安全技術(shù)的方方面面。歡迎繼續(xù)關(guān)注!

下一章節(jié):最新Spring Security實(shí)戰(zhàn)教程(二)表單登錄定制到處理邏輯的深度改造

到此這篇關(guān)于最新Spring Security實(shí)戰(zhàn)教程之初識(shí)Spring Security安全框架的文章就介紹到這了,更多相關(guān)Spring Security安全框架內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決feign之間文件上傳報(bào)錯(cuò):Error converting request body的問(wèn)題

    解決feign之間文件上傳報(bào)錯(cuò):Error converting request body

    這篇文章主要介紹了解決feign之間文件上傳報(bào)錯(cuò):Error converting request body的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • 老生常談Java異常處理和設(shè)計(jì)(推薦)

    老生常談Java異常處理和設(shè)計(jì)(推薦)

    下面小編就為大家?guī)?lái)一篇老生常談Java異常處理和設(shè)計(jì)(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • SpringData實(shí)現(xiàn)自定義Redis緩存的序列化機(jī)制和過(guò)期策略

    SpringData實(shí)現(xiàn)自定義Redis緩存的序列化機(jī)制和過(guò)期策略

    Spring Data Redis緩存通過(guò)提供靈活的配置選項(xiàng),使開(kāi)發(fā)者能夠根據(jù)業(yè)務(wù)需求自定義序列化方式和過(guò)期策略,下面就來(lái)具體介紹一下,感興趣的可以了解一下
    2025-04-04
  • JAVA生成xml文件簡(jiǎn)單示例

    JAVA生成xml文件簡(jiǎn)單示例

    這篇文章主要介紹了JAVA生成xml文件的相關(guān)資料,在Java中可以使用DOM或者JDOM來(lái)生成XML文件,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • mybatis-generator 修改表結(jié)構(gòu)后實(shí)體不更新問(wèn)題及解決方法

    mybatis-generator 修改表結(jié)構(gòu)后實(shí)體不更新問(wèn)題及解決方法

    本文主要介紹了如何在MyBatis Generator中修改表結(jié)構(gòu)后更新實(shí)體類(lèi)的問(wèn)題,并提供了解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-04-04
  • Java中LinkedHashSet的實(shí)現(xiàn)原理詳解

    Java中LinkedHashSet的實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了Java中LinkedHasSet的實(shí)現(xiàn)原理詳解,LinkedHashSet?是具有可預(yù)知迭代順序的?Set?接口的哈希表和鏈接列表實(shí)現(xiàn),此實(shí)現(xiàn)與HashSet?的不同之處在于,后者維護(hù)著一個(gè)運(yùn)行于所有條目的雙重鏈接列表,需要的朋友可以參考下
    2023-09-09
  • Spring源碼解析之Configuration

    Spring源碼解析之Configuration

    今天帶大家來(lái)學(xué)習(xí)Java Spring相關(guān)知識(shí),文中對(duì)Configuration源碼介紹的非常詳細(xì),有非常多的圖文解說(shuō)及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Java中初始化塊詳解及實(shí)例代碼

    Java中初始化塊詳解及實(shí)例代碼

    這篇文章主要介紹了Java中初始化塊詳解及實(shí)例代碼的相關(guān)資料,在Java中,有兩種初始化塊:靜態(tài)初始化塊和非靜態(tài)初始化塊,需要的朋友可以參考下
    2017-03-03
  • springboot中JSONObject遍歷并替換部分json值

    springboot中JSONObject遍歷并替換部分json值

    這篇文章主要介紹了springboot中JSONObject遍歷并替換部分json值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • SpringBoot?自定義starter?yaml提示失效問(wèn)題及解決方法

    SpringBoot?自定義starter?yaml提示失效問(wèn)題及解決方法

    在自定義starter后,必不可少會(huì)有properties配置參數(shù)需要指定,而在有時(shí)又不知道為什么出現(xiàn)這個(gè)問(wèn)題,這篇文章主要介紹了SpringBoot?自定義starter?yaml提示失效問(wèn)題,需要的朋友可以參考下
    2022-12-12

最新評(píng)論

瑞安市| 永仁县| 武清区| 呼图壁县| 百色市| 黔南| 南充市| 苗栗市| 扎赉特旗| 曲松县| 郧西县| 金秀| 墨竹工卡县| 手游| 天等县| 广元市| 渭南市| 罗平县| 忻城县| 德保县| 惠来县| 阜宁县| 竹山县| 和林格尔县| 马边| 台前县| 西和县| 大城县| 九寨沟县| 昭觉县| 北安市| 翁牛特旗| 抚远县| 攀枝花市| 巧家县| 五常市| 怀集县| 岗巴县| 海宁市| 慈利县| 灯塔市|