欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Security @PreAuthorize注解分析

 更新時(shí)間:2024年11月25日 09:52:12   作者:瘋一樣的碼農(nóng)  
本教程介紹了如何使用 Spring 方法級(jí)安全和 @PreAuthorize 注解來(lái)保護(hù) RestController 方法,通過(guò)這些步驟,您可以確保只有具有適當(dāng)角色或權(quán)限的用戶(hù)才能訪問(wèn)特定的 REST API,感興趣的朋友跟隨小編一起看看吧

@PreAuthorize 注解在 Spring Security 中提供了一種聲明式的方法,可以在您的 Spring Boot 應(yīng)用中添加方法級(jí)別的安全檢查。本教程將引導(dǎo)您設(shè)置并有效使用 @PreAuthorize,確保用戶(hù)只能在具有特定角色或權(quán)限的情況下調(diào)用 REST API。

什么是 @PreAuthorize?

@PreAuthorize 是 Spring Security 的一個(gè)注解,用于指定在方法調(diào)用前應(yīng)評(píng)估的表達(dá)式,以確定調(diào)用者是否有權(quán)執(zhí)行該方法。

將 Spring Security 添加到項(xiàng)目中

確保您的項(xiàng)目中包含 Spring Security。對(duì)于 Maven,將以下依賴(lài)項(xiàng)添加到 pom.xml 文件中:

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

對(duì)于 Gradle,將以下內(nèi)容添加到 build.gradle 文件中:

implementation 'org.springframework.boot:spring-boot-starter-security'

啟用方法級(jí)安全

要在 Spring Boot 應(yīng)用的 Rest Controller 類(lèi)中對(duì)特定方法應(yīng)用 Spring Security,必須啟用方法級(jí)安全。為此,您需要使用 @EnableMethodSecurity 注解。

@Configuration
@EnableMethodSecurity
public class SpringSecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.csrf(csrf -> csrf.disable())
            .authorizeHttpRequests(authorize -> authorize
                .requestMatchers(HttpMethod.GET, "/api/user").hasRole("USER")
                .requestMatchers(HttpMethod.GET, "/api/admin").hasRole("ADMIN")
                .anyRequest().authenticated()
            )
            .httpBasic(Customizer.withDefaults());
        return http.build();
    }
    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails ramesh = User.builder()
            .username("ramesh")
            .password(passwordEncoder().encode("password"))
            .roles("USER")
            .build();
        UserDetails admin = User.builder()
            .username("admin")
            .password(passwordEncoder().encode("admin"))
            .roles("ADMIN")
            .build();
        return new InMemoryUserDetailsManager(ramesh, admin);
    }
}

@EnableMethodSecurity 是一個(gè) Spring 注解,用于在 Spring 應(yīng)用中啟用方法級(jí)安全。使用此注解后,Spring 將為包含安全方法的類(lèi)創(chuàng)建代理,并在調(diào)用這些方法時(shí)攔截以檢查調(diào)用者是否具有執(zhí)行方法所需的權(quán)限。

此注解與其他注解(如 @PreAuthorize、@PostAuthorize@Secured@RolesAllowed)一起工作,這些注解用于指定方法的訪問(wèn)控制規(guī)則。例如,您可以使用 @PreAuthorize 指定只有具有特定角色或權(quán)限的用戶(hù)才能調(diào)用某個(gè)方法;或者使用 @PostAuthorize 指定方法只返回調(diào)用者有權(quán)查看的數(shù)據(jù)。

使用 @PreAuthorize 注解保護(hù) REST API

以下代碼展示了如何使用 Spring Security 進(jìn)行基于角色的 RESTful 端點(diǎn)授權(quán)。

@RestController
@RequestMapping("/api/")
public class AdminController {
    @PreAuthorize("hasRole('ADMIN')")
    @GetMapping("/admin")
    public ResponseEntity<String> helloAdmin() {
        return ResponseEntity.ok("Hello Admin");
    }
    @PreAuthorize("hasRole('USER')")
    @GetMapping("/user")
    public ResponseEntity<String> helloUser() {
        return ResponseEntity.ok("Hello User");
    }
}
  • @PreAuthorize("hasRole('ADMIN')"): 應(yīng)用于 helloAdmin() 方法,表示只有具有 ‘ADMIN’ 角色的用戶(hù)才能訪問(wèn)此端點(diǎn)。
  • @PreAuthorize("hasRole('USER')"): 應(yīng)用于 helloUser() 方法,限制只有具有 ‘USER’ 角色的用戶(hù)才能訪問(wèn)。

總結(jié)

本教程介紹了如何使用 Spring 方法級(jí)安全和 @PreAuthorize 注解來(lái)保護(hù) RestController 方法。通過(guò)這些步驟,您可以確保只有具有適當(dāng)角色或權(quán)限的用戶(hù)才能訪問(wèn)特定的 REST API。

到此這篇關(guān)于Spring Security @PreAuthorize注解分析的文章就介紹到這了,更多相關(guān)Spring Security @PreAuthorize內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決java web應(yīng)用線上系統(tǒng)偶發(fā)宕機(jī)的情況

    解決java web應(yīng)用線上系統(tǒng)偶發(fā)宕機(jī)的情況

    這篇文章主要介紹了解決java web應(yīng)用線上系統(tǒng)偶發(fā)宕機(jī)的情況,具有好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • SpringBoot框架如何管理Xml和CSV

    SpringBoot框架如何管理Xml和CSV

    XML是可擴(kuò)展標(biāo)記語(yǔ)言,是一種用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語(yǔ)言。CSV是一種通用的、相對(duì)簡(jiǎn)單的文件格式,通常被用在大數(shù)據(jù)領(lǐng)域,進(jìn)行大規(guī)模的數(shù)據(jù)搬運(yùn)操作,本文將介紹SpringBoot框架如何管理Xml和CSV
    2021-06-06
  • JDK多版本共存并自由切換的操作指南(本文為JDK8和JDK17)

    JDK多版本共存并自由切換的操作指南(本文為JDK8和JDK17)

    本文介紹了如何在Windows系統(tǒng)上配置多版本JDK(以JDK8和JDK17為例),并通過(guò)圖文結(jié)合的方式給大家講解了詳細(xì)步驟,具有一定的參考價(jià)值,需要的朋友可以參考下
    2025-03-03
  • MyBatis Generator介紹及使用方法

    MyBatis Generator介紹及使用方法

    MyBatis Generator 是一款針對(duì) MyBatis 或 iBATIS 設(shè)計(jì)的代碼生成器,由 MyBatis 官方提供,這篇文章主要介紹了MyBatis Generator介紹及使用方法,需要的朋友可以參考下
    2023-06-06
  • 淺析springcloud 整合 zipkin-server 內(nèi)存日志監(jiān)控

    淺析springcloud 整合 zipkin-server 內(nèi)存日志監(jiān)控

    Zipkin是一款開(kāi)源的分布式實(shí)時(shí)數(shù)據(jù)追蹤系統(tǒng)(Distributed Tracking System),其主要功能是聚集來(lái)自各個(gè)異構(gòu)系統(tǒng)的實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)。這篇文章主要介紹了springcloud 整合 zipkin-server 內(nèi)存日志監(jiān)控,需要的朋友可以參考下
    2019-11-11
  • java8使用filter()取出自己所需數(shù)據(jù)

    java8使用filter()取出自己所需數(shù)據(jù)

    這篇文章主要介紹了java8使用filter()取出自己所需數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • JDK 1.8 安裝配置教程(win7 64bit )

    JDK 1.8 安裝配置教程(win7 64bit )

    這篇文章主要為大家詳細(xì)介紹了win7 64bit下JDK 1.8 安裝配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • java:找不到符號(hào)報(bào)錯(cuò)的排錯(cuò)方案舉例

    java:找不到符號(hào)報(bào)錯(cuò)的排錯(cuò)方案舉例

    當(dāng)你使用一個(gè)未定義或未導(dǎo)入的類(lèi)時(shí),編譯器會(huì)報(bào)錯(cuò),下面這篇文章主要給大家介紹了關(guān)于java:找不到符號(hào)報(bào)錯(cuò)的排錯(cuò)方案,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • SpringBoot Web詳解靜態(tài)資源規(guī)則與定制化處理

    SpringBoot Web詳解靜態(tài)資源規(guī)則與定制化處理

    這篇文章主要介紹了SpringBoot web場(chǎng)景的靜態(tài)資源規(guī)則與定制化,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • 一文掌握J(rèn)ava中List和Set接口的基本使用

    一文掌握J(rèn)ava中List和Set接口的基本使用

    這篇文章主要為大家詳細(xì)介紹Java中List和Set接口,文中通過(guò)示例代碼讓大家能夠輕松掌握List和Set接口的基本使用,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-07-07

最新評(píng)論