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

Spring Security內存中認證的實現(xiàn)

 更新時間:2023年11月16日 11:09:46   作者:Jimmy  
本文主要介紹了Spring Security內存中認證的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

本文采用的是意譯的方式

在這篇 Spring Security 教程中,我們將學習如何配置 Spring Security,以實現(xiàn)在內存認證的功能。

概覽

Spring Security 中的 InMemoryUserDetailsManager 實現(xiàn)了 UserDetailsService,以提供存儲在內存中的基于用戶名/密碼的身份驗證。InMemoryUserDetailsManager 通過實現(xiàn) UserDetailsManager 接口提供對 UserDetails 的管理功能。當 Spring Security 被配置為接受用戶名和密碼進行身份驗證時,將使用基于 UserDetails 的身份驗證。

譯者加:當然,我們可以通過重寫 username 和 password 的方法更改驗證的字段。比如將 username 返回值為 email。

Maven

在 Spring Boot 項目中使用 Spring Security,我們需要添加下面 Maven 依賴:

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

Spring Security 配置

接下來,我們使用內存認證的方式配置 Spring Security。我們創(chuàng)建名為 SpringSecurityConfig 類,并添加下面代碼??

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
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;

@Configuration
public class SpringSecurityConfig {

    @Bean
    public static PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

    @Bean
    SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

        http.csrf().disable()
                .authorizeHttpRequests((authorize) -> {
                    authorize.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);
    }
}

在這里,我們使用了 httpBasic() 方法在 SecurityFilterChain bean 中定義了基本認證。

@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

    http.csrf().disable()
            .authorizeHttpRequests((authorize) -> {
                authorize.anyRequest().authenticated();
            }).httpBasic(Customizer.withDefaults());
    return http.build();
}

在下面的 InMemoryUserDetailsManager 的 Java 配置中,我們創(chuàng)建了兩個用戶并且將其存放在 InMemoryUserDetailsManager 類對象中。

@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);
}

Spring Security 的 InMemoryUserDetailsManager 通過實現(xiàn) UserDetailsService 接口,提供了基于用戶名/密碼的身份驗證支持,這些驗證信息存放在內存中。
需要注意的是,我們使用 PasswordEncoder 來加密密碼。Spring Security 中的 PasswordEncoder 接口被用來對密碼進行單向轉換,以確保密碼安全地存儲。我們使用的 BCryptPasswordEncoder 類實現(xiàn)了 PasswordEncoder 接口。

BCryptPasswordEncoder 類實現(xiàn)了 bcrypt 算法對密碼進行哈希算法。

@Bean
public static PasswordEncoder passwordEncoder(){
    return new BCryptPasswordEncoder();
}
.password(passwordEncoder().encode("password"))

創(chuàng)建 REST API

為了驗證上面的 Spring Security 配置,我們創(chuàng)建一個基于 Spring Security 的簡單 REST API。嗯,如果我們只是簡單添加了 Spring Security 依賴到 Spring Boot 項目中,那么 Spring Security 會默認保護程序的所有 URLs。

import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class WelComeController {

    @GetMapping("/greeting")
    public String greeting(Authentication authentication) {

        String userName = authentication.getName();

        return "Spring Security In-memory Authentication Example - Welcome " + userName;
    }
}

使用 Postman 測試 REST API

為了測試 REST APIs,我們在頭信息 basic authentication 中輸入用戶名和密碼。
截圖中,我們輸入了用戶名/密碼為 admin/admin:

總結

在這個教程中,我們學到了怎么配置 Spring Security 6 以在內存中認證。一言蔽之,我們使用了 Spring Security 的 InMemoryUserDetailsManager 類,該類實現(xiàn)了 UserDetailsService,以提供在內存中存儲用戶名/密碼的身份認證支持。

到此這篇關于Spring Security內存中認證的實現(xiàn)的文章就介紹到這了,更多相關Spring Security內存認證內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JAVA 中的大數(shù)字操作類詳解

    JAVA 中的大數(shù)字操作類詳解

    Java的BigInteger類用于處理超出int和long范圍的大整數(shù),而BigDecimal類則用于高精度的浮點數(shù)運算,這兩個類都是Number的子類,提供了一系列方法執(zhí)行加減乘除等運算,BigInteger不支持表示小數(shù),只能表示整數(shù),BigDecimal可以控制小數(shù)位數(shù)和舍入方式,感興趣的朋友一起看看吧
    2024-10-10
  • Spring boot中@Conditional和spring boot的自動配置實例詳解

    Spring boot中@Conditional和spring boot的自動配置實例詳解

    本文通過實例給大家介紹了Spring boot中@Conditional和spring boot的自動配置,需要的朋友可以參考下
    2018-05-05
  • 基于SpringBoot集成測試遠程連接Redis服務的教程詳解

    基于SpringBoot集成測試遠程連接Redis服務的教程詳解

    這篇文章主要介紹了基于SpringBoot集成測試遠程連接的Redis服務的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Java注冊郵箱激活驗證實現(xiàn)代碼

    Java注冊郵箱激活驗證實現(xiàn)代碼

    這篇文章主要介紹了Java注冊郵箱激活驗證實現(xiàn)代碼,有需要的朋友可以參考一下
    2013-12-12
  • IDEA java出現(xiàn)無效的源發(fā)行版14解決方案

    IDEA java出現(xiàn)無效的源發(fā)行版14解決方案

    這篇文章主要介紹了IDEA java出現(xiàn)無效的源發(fā)行版14解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Java this 關鍵字的使用方法詳解

    Java this 關鍵字的使用方法詳解

    這篇文章主要介紹了Java this 關鍵字的使用方法詳解的相關資料,希望通過本文能幫助到大家,讓大家徹底理解掌握這部分內容,需要的朋友可以參考下
    2017-10-10
  • Springboot中com.mysql.cj.jdbc.Driver在yml文件中爆紅的原因解讀

    Springboot中com.mysql.cj.jdbc.Driver在yml文件中爆紅的原因解讀

    這篇文章主要介紹了Springboot中com.mysql.cj.jdbc.Driver在yml文件中爆紅的原因解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 一步步講解Spring?Boot整合MyBatis與PostgreSQL實戰(zhàn)指南

    一步步講解Spring?Boot整合MyBatis與PostgreSQL實戰(zhàn)指南

    這篇文章主要介紹了如何在SpringBoot環(huán)境中集成MyBatis和PostgreSQL,涵蓋了環(huán)境搭建、項目創(chuàng)建、數(shù)據(jù)源配置、實體類與Mapper接口定義、MapperXML文件編寫、業(yè)務層與控制層實現(xiàn)以及測試與驗證的全過程,需要的朋友可以參考下
    2025-02-02
  • Spring定時任務中@PostConstruct被多次執(zhí)行異常的分析與解決

    Spring定時任務中@PostConstruct被多次執(zhí)行異常的分析與解決

    這篇文章主要給大家介紹了關于Spring定時任務中@PostConstruct被多次執(zhí)行異常的分析與解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-10-10
  • Java實現(xiàn)簡單銀行ATM功能

    Java實現(xiàn)簡單銀行ATM功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)銀行ATM簡單功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10

最新評論