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

Spring?Boot?3.1中整合Spring?Security和Keycloak的方法

 更新時間:2023年06月01日 14:59:13   作者:程序猿DD  
本文介紹在最新的SpringBoot3.1版本之下,如何將Keycloak和Spring?Security一起跑起來,文中結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧

在今年2月14日的時候,Keycloak 團(tuán)隊宣布他們正在棄用大多數(shù) Keycloak 適配器。其中包括Spring Security和Spring Boot的適配器,這意味著今后Keycloak團(tuán)隊將不再提供針對Spring Security和Spring Boot的集成方案。但是,如此強大的Keycloak,還要用怎么辦呢?本文就來聊聊,在最新的Spring Boot 3.1版本之下,如何將Keycloak和Spring Security一起跑起來。

準(zhǔn)備工作

這里所采用的框架與工具版本信息如下:

  • Spring Boot 3.1.0
  • Keycloak 21.1.1

如果您采用的是其他版本,本文內(nèi)容不一定有效,但可以作為參考。

配置Keycloak

第一步:為Spring Boot應(yīng)用創(chuàng)建Realm,并在下面創(chuàng)建一個Client

第二步:創(chuàng)建一個SYS_ADMIN角色,并創(chuàng)建一個用戶賦予SYS_ADMIN角色

第三步:調(diào)用Keycloak接口生成Access Token,可以用下面的curl命令或者其他任何發(fā)請求的工具,比如:Postman等。

curl --location 'http://localhost:9090/realms/MyAppRealm/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'username=<YOUR_USER_NAME>' \
--data-urlencode 'password=<YOUR_USER_PASSWORD>' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'client_id=My-Awesome-App' \
--data-urlencode 'client_secret=<KEYCLOAK_CLIENT_SECRET>' \
--data-urlencode 'scope=openid'

記住獲得到Access Token,后續(xù)驗證時候要用。

配置Spring Boot應(yīng)用

第一步:創(chuàng)建一個Spring Boot應(yīng)用,這個很簡單,這里不贅述了。如果您還不會,可以看看我的Spring Boot教程

第二步:在pom.xml中添加依賴:

<dependency>
   <groupId>org.springframework.security</groupId>
   <artifactId>spring-security-oauth2-jose</artifactId>
</dependency>

第三步:修改配置文件

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: http://localhost:9090/realms/MyAppRealm
          jwk-set-uri: http://localhost:9090/realms/MyAppRealm/protocol/openid-connect/certs

第四步:創(chuàng)建一個需要鑒權(quán)的測試接口

@RequestMapping("/test")
@RestController
public class MySuperSecuredController {
    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }
}

第五步:創(chuàng)建SecurityFilterChain,用來告知Spring Security在JWT令牌中查找角色信息的位置。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .authorizeHttpRequests(registry -> registry
                        .requestMatchers("/test/**").hasRole("SYS_ADMIN")
                        .anyRequest().authenticated()
                )
                .oauth2ResourceServer(oauth2Configurer -> oauth2Configurer.jwt(jwtConfigurer -> jwtConfigurer.jwtAuthenticationConverter(jwt -> {
                    Map<String, Collection<String>> realmAccess = jwt.getClaim("realm_access");
                    Collection<String> roles = realmAccess.get("roles");
                    var grantedAuthorities = roles.stream()
                            .map(role -> new SimpleGrantedAuthority("ROLE_" + role))
                            .toList();
                    return new JwtAuthenticationToken(jwt, grantedAuthorities);
                })))
        ;
        return httpSecurity.build();
    }
}

驗證一下

在完成了上面配置所有之后之后,啟動Spring Boot應(yīng)用,同時保證Keycloak也在運行中。

嘗試請求/test/hello接口:

  • 當(dāng)不包含Authorization頭信息的時候,將返回401錯誤
  • 當(dāng)包含Authorization頭信息(前文用調(diào)接口獲取的Access Token)的時候,才能正確訪問到。

小結(jié)

雖然Keycloak 團(tuán)隊宣布了不再對Spring Security提供適配,但Spring Security長期以來一直為OAuth和OIDC提供強大的內(nèi)置支持。所以,只要我們理解Spring Security是如何處理OAuth和OIDC的,那么與Keyloak的集成依然不復(fù)雜。

到此這篇關(guān)于Spring Boot 3.1中如何整合Spring Security和Keycloak的文章就介紹到這了,更多相關(guān)Spring Boot 3.1整合Spring Security和Keycloak內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Java抽象類與普通類的區(qū)別

    詳解Java抽象類與普通類的區(qū)別

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Java抽象類與普通類的區(qū)別展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • java synchronized同步靜態(tài)方法和同步非靜態(tài)方法的異同

    java synchronized同步靜態(tài)方法和同步非靜態(tài)方法的異同

    這篇文章主要介紹了java synchronized同步靜態(tài)方法和同步非靜態(tài)方法的異同的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • SpringBoot3實現(xiàn)MySQL讀寫分離的完整指南

    SpringBoot3實現(xiàn)MySQL讀寫分離的完整指南

    在高并發(fā)場景下,數(shù)據(jù)庫往往成為系統(tǒng)瓶頸,讀寫分離通過將寫操作定向到主庫、讀操作分發(fā)到從庫,顯著提升系統(tǒng)讀性能和數(shù)據(jù)可用性,本文給大家介紹了SpringBoot3實現(xiàn)MySQL讀寫分離的完整指南,需要的朋友可以參考下
    2025-11-11
  • @Autowired一個接口有多個實現(xiàn)類的情況

    @Autowired一個接口有多個實現(xiàn)類的情況

    本文介紹了Spring中@Autowired注解的注入原理,默認(rèn)按類型(byType)注入,當(dāng)存在多個實現(xiàn)類時,會報錯,可以通過修改變量名或配合@Qualifier注解,指定注入具體實現(xiàn)類,變?yōu)榘疵Q(byName)注入
    2025-10-10
  • Java面試之限流的實現(xiàn)方式小結(jié)

    Java面試之限流的實現(xiàn)方式小結(jié)

    限流是指在各種應(yīng)用場景中,通過技術(shù)和策略手段對數(shù)據(jù)流量、請求頻率或資源消耗進(jìn)行有計劃的限制,本文為大家整理了常見的限流的實現(xiàn)方式,有需要的可以參考下
    2024-02-02
  • java程序員如何編寫更好的單元測試的7個技巧

    java程序員如何編寫更好的單元測試的7個技巧

    測試是開發(fā)的一個非常重要的方面,可以在很大程度上決定一個應(yīng)用程序的命運。良好的測試可以在早期捕獲導(dǎo)致應(yīng)用程序崩潰的問題,但較差的測試往往總是導(dǎo)致故障和停機。本文主要介紹java程序員編寫更好的單元測試的7個技巧。下面跟著小編一起來看下吧
    2017-03-03
  • @Async注解的使用以及注解失效問題的解決

    @Async注解的使用以及注解失效問題的解決

    在Spring框架中,@Async注解用于聲明異步任務(wù),可以修飾類或方法,使用@Async時,必須確保方法為public,且類為Spring管理的Bean,啟用異步任務(wù)需要在主類上添加@EnableAsync注解,默認(rèn)線程池為SimpleAsyncTaskExecutor
    2024-09-09
  • Java通過notify和wait實現(xiàn)線程間的通信功能

    Java通過notify和wait實現(xiàn)線程間的通信功能

    在軟件開發(fā)中,線程是實現(xiàn)并發(fā)執(zhí)行的重要手段,然而,線程之間的協(xié)作與通信卻是開發(fā)者必須重點考慮的挑戰(zhàn)之一,Java作為一種廣泛應(yīng)用于多線程編程的語言,本文將深入探討Java中通過notify和wait實現(xiàn)線程間通信的機制,需要的朋友可以參考下
    2024-06-06
  • java實現(xiàn)oracle插入當(dāng)前時間的方法

    java實現(xiàn)oracle插入當(dāng)前時間的方法

    這篇文章主要介紹了java實現(xiàn)oracle插入當(dāng)前時間的方法,以實例形式對比分析了java使用Oracle操作時間的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • java實現(xiàn)文件變化監(jiān)控的方法(推薦)

    java實現(xiàn)文件變化監(jiān)控的方法(推薦)

    下面小編就為大家?guī)硪黄猨ava實現(xiàn)文件變化監(jiān)控的方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08

最新評論

陆良县| 景谷| 镇远县| 抚远县| 闸北区| 刚察县| 类乌齐县| 白朗县| 中牟县| 德清县| 靖边县| 乐陵市| 江陵县| 吉首市| 东安县| 民勤县| 婺源县| 浪卡子县| 宿州市| 乃东县| 建水县| 双城市| 兴城市| 瑞昌市| 武穴市| 方正县| 定州市| 宝鸡市| 深水埗区| 乌海市| 师宗县| 奉节县| 通许县| 泉州市| 临邑县| 辽阳县| 遵义市| 乐清市| 股票| 重庆市| 同江市|