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

Spring Security的持久化用戶和授權(quán)實(shí)現(xiàn)方式

 更新時(shí)間:2025年02月18日 11:04:58   作者:Exill  
文章介紹了如何使用JdbcUserDetailsManager實(shí)現(xiàn)數(shù)據(jù)庫讀取用戶,并展示了如何配置SpringSecurity進(jìn)行授權(quán)管理,通過創(chuàng)建數(shù)據(jù)庫表、配置數(shù)據(jù)庫連接和修改SecurityConfig,實(shí)現(xiàn)了用戶權(quán)限的控制

使用JdbcUserDetailsManager(UserDetailsService另一種實(shí)現(xiàn))實(shí)現(xiàn)數(shù)據(jù)庫讀取用戶

1.引入jdbc和相關(guān)數(shù)據(jù)庫驅(qū)動(dòng)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

2.創(chuàng)建數(shù)據(jù)庫表

--用戶表
CREATE TABLE users( 
    username VARCHAR(50)  NOT NULL PRIMARY KEY --用戶名, 
    password VARCHAR(500) NOT NULL             --密碼, 
    enabled  BOOLEAN      NOT NULL             --有效性
);
--權(quán)限表
CREATE TABLE authorities( 
    username  VARCHAR(50) NOT NULL  --用戶名, 
    authority VARCHAR(50) NOT NULL  --權(quán)限, 
    constraint fk FOREIGN KEY(username) REFERENCES users(username)
);
CREATE unique index ix_auth_username ON authorities (username, authority);

3.配置數(shù)據(jù)庫連接(application.yml)

spring:
    datasource:
        driver-class-name: org.postgresql.Driver
        url: jdbc:postgresql://localhost:5432/security
        username:postgres
        password: postgres

4.修改SecurityConfig配置

@Configuration
public class SecurityConfig {
    //配置Security過濾鏈
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        //配置哪些接口需要認(rèn)證(.anyRequest().authenticated()代表任何請(qǐng)求都需認(rèn)證)
        http.authorizeHttpRequests(authorize -> {
            authorize.anyRequest().authenticated();
        });
        //配置post表單請(qǐng)求/login接口
        http.formLogin(Customizer.withDefaults());
        //csrf攻擊:開發(fā)環(huán)境可不配方便調(diào)試,上線環(huán)境需配置,否則會(huì)遭csrf攻擊
        http.csrf(AbstractHttpConfigurer::disable);
        //返回Security過濾鏈對(duì)象
        return http.build();
    }

    @Bean //配置JdbcUserDetailsManager實(shí)現(xiàn)數(shù)據(jù)庫存儲(chǔ)用戶
    public UserDetailsService userDetailsService(DataSource dataSource) {
        return new JdbcUserDetailsManager(dataSource);
    }
}

實(shí)現(xiàn)Spring Security授權(quán)功能

1.創(chuàng)建接口

@RestController
public class HelloController{

    @RequestMapping("/hello")
    public String hello() { 
        return "Hello Security"; 
    }

    @RequestMapping("/hello1")
    public String hello1() { 
        return "Hello Security1"; 
    }

}

2.配置數(shù)據(jù)庫賬號(hào)和權(quán)限(DbUser用戶擁有hello和hello1權(quán)限、DbUser1只擁有hello1權(quán)限)

3.修改SecurityConfig配置

@Configuration
public class SecurityConfig {
    //配置Security過濾鏈
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        //配置哪些接口需要認(rèn)證(.anyRequest().authenticated()代表任何請(qǐng)求都需認(rèn)證)
        http.authorizeHttpRequests(authorize -> {
            authorize.requestMatchers("/hello").hasAuthority("hello");
            authorize.requestMatchers("/hello1").hasAuthority("hello1");
            authorize.anyRequest().authenticated();
        });
        //配置post表單請(qǐng)求/login接口
        http.formLogin(Customizer.withDefaults());
        //csrf攻擊:開發(fā)環(huán)境可不配方便調(diào)試,上線環(huán)境需配置,否則會(huì)遭csrf攻擊
        http.csrf(AbstractHttpConfigurer::disable);
        //返回Security過濾鏈對(duì)象
        return http.build();
    }

    @Bean //配置JdbcUserDetailsManager實(shí)現(xiàn)數(shù)據(jù)庫存儲(chǔ)用戶
    public UserDetailsService userDetailsService(DataSource dataSource) {
        return new JdbcUserDetailsManager(dataSource);
    }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java實(shí)現(xiàn)直線分形山脈

    java實(shí)現(xiàn)直線分形山脈

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)直線分形山脈,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java集合框架中迭代器Iterator解析

    Java集合框架中迭代器Iterator解析

    這篇文章主要為大家簡(jiǎn)單介紹了Java集合框架中迭代器Iterator的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Java多線程下載的實(shí)現(xiàn)方法

    Java多線程下載的實(shí)現(xiàn)方法

    復(fù)習(xí)多線程的時(shí)候,練習(xí)了下,順便記錄一下:
    2013-03-03
  • Maven發(fā)布項(xiàng)目到Nexus私有服務(wù)器

    Maven發(fā)布項(xiàng)目到Nexus私有服務(wù)器

    本文主要介紹了Maven發(fā)布項(xiàng)目到Nexus私有服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Springboot基于maven打包分離lib及resource

    Springboot基于maven打包分離lib及resource

    這篇文章主要介紹了Springboot基于maven打包分離lib及resource,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • spring boot之SpringApplication 事件監(jiān)聽

    spring boot之SpringApplication 事件監(jiān)聽

    這篇文章主要介紹了spring boot之SpringApplication 事件監(jiān)聽,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • java 基礎(chǔ)教程之多線程詳解及簡(jiǎn)單實(shí)例

    java 基礎(chǔ)教程之多線程詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了java 基礎(chǔ)教程之多線程詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,線程的基本屬性、如何創(chuàng)建線程、線程的狀態(tài)切換以及線程通信,需要的朋友可以參考下
    2017-03-03
  • springboot+vue實(shí)現(xiàn)登錄功能

    springboot+vue實(shí)現(xiàn)登錄功能

    這篇文章主要為大家詳細(xì)介紹了springboot+vue實(shí)現(xiàn)登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Java在Excel中添加水印的實(shí)現(xiàn)(單一水印、平鋪水印)

    Java在Excel中添加水印的實(shí)現(xiàn)(單一水印、平鋪水印)

    這篇文章主要介紹了Java在Excel中添加水印的實(shí)現(xiàn)(單一水印、平鋪水印),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 如何用java對(duì)接微信小程序下單后的發(fā)貨接口

    如何用java對(duì)接微信小程序下單后的發(fā)貨接口

    這篇文章主要介紹了在微信小程序后臺(tái)實(shí)現(xiàn)發(fā)貨通知的步驟,包括獲取Access_token、使用RestTemplate調(diào)用發(fā)貨接口、處理AccessToken緩存以及發(fā)貨成功后的提醒,需要的朋友可以參考下
    2025-03-03

最新評(píng)論

叙永县| 孟村| 宁夏| 仪征市| 吉林市| 松溪县| 中方县| 龙陵县| 保山市| 海口市| 洛阳市| 海伦市| 兴和县| 新和县| 泸定县| 全南县| 桦南县| 镇安县| 利川市| 衢州市| 和田县| 韶山市| 龙井市| 峨边| 宁强县| 周口市| 阿勒泰市| 平果县| 平泉县| 新泰市| 调兵山市| 泸水县| 江阴市| 视频| 民县| 舟曲县| 鸡泽县| 临海市| 靖西县| 德江县| 兰州市|