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

Spring Security內(nèi)存中認(rèn)證的實(shí)現(xiàn)

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

本文采用的是意譯的方式

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

概覽

Spring Security 中的 InMemoryUserDetailsManager 實(shí)現(xiàn)了 UserDetailsService,以提供存儲(chǔ)在內(nèi)存中的基于用戶名/密碼的身份驗(yàn)證。InMemoryUserDetailsManager 通過(guò)實(shí)現(xiàn) UserDetailsManager 接口提供對(duì) UserDetails 的管理功能。當(dāng) Spring Security 被配置為接受用戶名和密碼進(jìn)行身份驗(yàn)證時(shí),將使用基于 UserDetails 的身份驗(yàn)證。

譯者加:當(dāng)然,我們可以通過(guò)重寫 username 和 password 的方法更改驗(yàn)證的字段。比如將 username 返回值為 email。

Maven

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

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

Spring Security 配置

接下來(lái),我們使用內(nèi)存認(rèn)證的方式配置 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 中定義了基本認(rèn)證。

@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)建了兩個(gè)用戶并且將其存放在 InMemoryUserDetailsManager 類對(duì)象中。

@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 通過(guò)實(shí)現(xiàn) UserDetailsService 接口,提供了基于用戶名/密碼的身份驗(yàn)證支持,這些驗(yàn)證信息存放在內(nèi)存中。
需要注意的是,我們使用 PasswordEncoder 來(lái)加密密碼。Spring Security 中的 PasswordEncoder 接口被用來(lái)對(duì)密碼進(jìn)行單向轉(zhuǎn)換,以確保密碼安全地存儲(chǔ)。我們使用的 BCryptPasswordEncoder 類實(shí)現(xiàn)了 PasswordEncoder 接口。

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

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

創(chuàng)建 REST API

為了驗(yàn)證上面的 Spring Security 配置,我們創(chuàng)建一個(gè)基于 Spring Security 的簡(jiǎn)單 REST API。嗯,如果我們只是簡(jiǎn)單添加了 Spring Security 依賴到 Spring Boot 項(xiàng)目中,那么 Spring Security 會(huì)默認(rèn)保護(hù)程序的所有 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 測(cè)試 REST API

為了測(cè)試 REST APIs,我們?cè)陬^信息 basic authentication 中輸入用戶名和密碼。
截圖中,我們輸入了用戶名/密碼為 admin/admin:

總結(jié)

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

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

相關(guān)文章

  • 使用java實(shí)現(xiàn)備份和恢復(fù)SQLServer表數(shù)據(jù)

    使用java實(shí)現(xiàn)備份和恢復(fù)SQLServer表數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了如何使用java實(shí)現(xiàn)備份和恢復(fù)SQLServer表數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql

    JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql

    這篇文章主要給大家介紹了關(guān)于JDBC中如何使用Java8的日期LocalDate和LocalDateTime的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • Java中去除字符串中所有空格的幾種方法

    Java中去除字符串中所有空格的幾種方法

    這篇文章介紹了Java中去除字符串中所有空格的幾種方法,有需要的朋友可以參考一下
    2013-07-07
  • 詳解Java?POI?excel自定義設(shè)置單元格格式

    詳解Java?POI?excel自定義設(shè)置單元格格式

    這篇文章主要介紹了Java?POI?excel設(shè)置單元格格式,自定義設(shè)置,設(shè)置單元格格式:來(lái)源_formats,更多數(shù)據(jù)類型從formats里面發(fā)現(xiàn),需要的朋友可以參考下
    2024-01-01
  • 關(guān)于Mybatis與JPA的優(yōu)缺點(diǎn)說(shuō)明

    關(guān)于Mybatis與JPA的優(yōu)缺點(diǎn)說(shuō)明

    這篇文章主要介紹了關(guān)于Mybatis與JPA的優(yōu)缺點(diǎn)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java實(shí)現(xiàn)Composite組合模式的實(shí)例代碼

    java實(shí)現(xiàn)Composite組合模式的實(shí)例代碼

    這篇文章主要介紹了java實(shí)現(xiàn)Composite組合模式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 關(guān)于Java中Bean的生命周期詳解

    關(guān)于Java中Bean的生命周期詳解

    這篇文章主要介紹了關(guān)于Java中Bean的生命周期詳解,所謂的?命周期指的是?個(gè)對(duì)象從誕?到銷毀的整個(gè)?命過(guò)程,我們把這個(gè)過(guò)程就叫做?個(gè)對(duì)象的?命周期,需要的朋友可以參考下
    2023-08-08
  • 詳解Java編程中static關(guān)鍵字和final關(guān)鍵字的使用

    詳解Java編程中static關(guān)鍵字和final關(guān)鍵字的使用

    這篇文章主要介紹了詳解Java編程中static關(guān)鍵字和final關(guān)鍵字的使用,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • JAVA中的for循環(huán)幾種使用方法講解

    JAVA中的for循環(huán)幾種使用方法講解

    這篇文章主要介紹了JAVA中的for循環(huán)幾種使用方法講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring Cloud學(xué)習(xí)教程之DiscoveryClient的深入探究

    Spring Cloud學(xué)習(xí)教程之DiscoveryClient的深入探究

    這篇文章主要給大家介紹了關(guān)于Spring Cloud學(xué)習(xí)教程之DiscoveryClient的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04

最新評(píng)論

永安市| 安西县| 临泉县| 辽宁省| 屯门区| 泗水县| 丰原市| 太和县| 稻城县| 凉城县| 邹城市| 花垣县| 沙河市| 五原县| 且末县| 瑞金市| 安宁市| 南阳市| 广宁县| 庆阳市| 鹤岗市| 丹寨县| 凤冈县| 康平县| 拜泉县| 邓州市| 清水县| 金门县| 阳山县| 搜索| 龙井市| 鄂伦春自治旗| 隆安县| 新晃| 东乡| 缙云县| 金寨县| 巴彦县| 衢州市| 密山市| 勐海县|