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

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

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

在今年2月14日的時候,Keycloak 團隊宣布他們正在棄用大多數(shù) Keycloak 適配器。其中包括Spring Security和Spring Boot的適配器,這意味著今后Keycloak團隊將不再提供針對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 團隊宣布了不再對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)文章

  • Maven中pom.xml文件報錯的原因解決

    Maven中pom.xml文件報錯的原因解決

    創(chuàng)建Maven項目的時候,如果你選擇的Packaging為war,那么就會報錯,本文主要介紹了Maven中pom.xml文件報錯的原因解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 深入解析java中的locale

    深入解析java中的locale

    以下是對java中的locale進行了深入的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • Java?入門圖形用戶界面設(shè)計之事件處理下

    Java?入門圖形用戶界面設(shè)計之事件處理下

    圖形界面(簡稱GUI)是指采用圖形方式顯示的計算機操作用戶界面。與早期計算機使用的命令行界面相比,圖形界面對于用戶來說在視覺上更易于接受,本篇精講Java語言中關(guān)于圖形用戶界面的事件處理
    2022-02-02
  • Java遍歷并刪除Map的四種方法對比

    Java遍歷并刪除Map的四種方法對比

    在Java中,遍歷并刪除?Map?中的元素有四種常見的方法,每種方法都有其適用場景和優(yōu)缺點,下面小編就來和大家詳細介紹一下這幾種方法的具體實現(xiàn)吧
    2024-10-10
  • 深入解析Java中ThreadLocal線程類的作用和用法

    深入解析Java中ThreadLocal線程類的作用和用法

    ThreadLocal為解決多線程程序的并發(fā)問題提供了一種新的思路,ThreadLocal并不是一個Thread,而是Thread的局部變量,本文就來深入解析Java中ThreadLocal線程類的作用和用法.
    2016-05-05
  • Java注解與反射原理說明

    Java注解與反射原理說明

    今天小編就為大家分享一篇關(guān)于Java注解與反射原理說明,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Spring中的SpringApplicationRunListener詳細解析

    Spring中的SpringApplicationRunListener詳細解析

    這篇文章主要介紹了Spring中的SpringApplicationRunListener詳細解析,SpringApplicationRunListener是一個監(jiān)聽SpringApplication中run方法的接口,在項目啟動過程的各個階段進行事件的發(fā)布,需要的朋友可以參考下
    2023-11-11
  • MyBatis的 config.xml標(biāo)簽

    MyBatis的 config.xml標(biāo)簽

    這篇文章主要介紹了MyBatis的 config.xml標(biāo)簽的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • java實現(xiàn)簡單學(xué)生成績管理系統(tǒng)

    java實現(xiàn)簡單學(xué)生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Spring?Boot中@Import三種使用方式實例詳解

    Spring?Boot中@Import三種使用方式實例詳解

    這篇文章主要介紹了Spring?Boot中@Import三種使用方式,主要有引入普通類,引入importSelector的實現(xiàn)類及引入importBeanDefinitionRegister的實現(xiàn)類,結(jié)合實例代碼給大家講解的非常詳細,需要的朋友可以參考下
    2022-11-11

最新評論