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

Spring Security的持久化用戶和授權實現方式

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

使用JdbcUserDetailsManager(UserDetailsService另一種實現)實現數據庫讀取用戶

1.引入jdbc和相關數據庫驅動

<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)建數據庫表

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

3.配置數據庫連接(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 {
        //配置哪些接口需要認證(.anyRequest().authenticated()代表任何請求都需認證)
        http.authorizeHttpRequests(authorize -> {
            authorize.anyRequest().authenticated();
        });
        //配置post表單請求/login接口
        http.formLogin(Customizer.withDefaults());
        //csrf攻擊:開發(fā)環(huán)境可不配方便調試,上線環(huán)境需配置,否則會遭csrf攻擊
        http.csrf(AbstractHttpConfigurer::disable);
        //返回Security過濾鏈對象
        return http.build();
    }

    @Bean //配置JdbcUserDetailsManager實現數據庫存儲用戶
    public UserDetailsService userDetailsService(DataSource dataSource) {
        return new JdbcUserDetailsManager(dataSource);
    }
}

實現Spring Security授權功能

1.創(chuàng)建接口

@RestController
public class HelloController{

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

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

}

2.配置數據庫賬號和權限(DbUser用戶擁有hello和hello1權限、DbUser1只擁有hello1權限)

3.修改SecurityConfig配置

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

    @Bean //配置JdbcUserDetailsManager實現數據庫存儲用戶
    public UserDetailsService userDetailsService(DataSource dataSource) {
        return new JdbcUserDetailsManager(dataSource);
    }
}

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • java實現直線分形山脈

    java實現直線分形山脈

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

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

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

    Java多線程下載的實現方法

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

    Maven發(fā)布項目到Nexus私有服務器

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

    Springboot基于maven打包分離lib及resource

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

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

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

    java 基礎教程之多線程詳解及簡單實例

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

    springboot+vue實現登錄功能

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

    Java在Excel中添加水印的實現(單一水印、平鋪水印)

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

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

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

最新評論

广东省| 莱阳市| 宜宾县| 全州县| 平陆县| 肥乡县| 乾安县| 平湖市| 宜城市| 利津县| 新巴尔虎右旗| 龙江县| 安平县| 东丰县| 兴海县| 咸阳市| 松滋市| 永吉县| 峨眉山市| 福海县| 安阳县| 塘沽区| 毕节市| 牙克石市| 凤城市| 大理市| 湖州市| 广南县| 温州市| 德钦县| 南和县| 建宁县| 勐海县| 鹤壁市| 沂源县| 筠连县| 太保市| 太仓市| 威海市| 沙坪坝区| 新巴尔虎左旗|