91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Spring Boot 3.1 中如何整合Spring Security和Keycloak

jf_ro2CN3Fa ? 來源:程序猿DD ? 2023-06-08 14:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


7bfd843c-0580-11ee-8a94-dac502259ad0.png

在今年2月14日的時候,Keycloak 團隊宣布他們正在棄用大多數 Keycloak 適配器。其中包括Spring Security和Spring Boot的適配器,這意味著今后Keycloak團隊將不再提供針對Spring Security和Spring Boot的集成方案。

7c0957da-0580-11ee-8a94-dac502259ad0.png

但是,如此強大的Keycloak,還要用怎么辦呢?本文就來聊聊,在最新的Spring Boot 3.1版本之下,如何將Keycloak和Spring Security一起跑起來。

準備工作

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

  • Spring Boot 3.1.0
  • Keycloak 21.1.1

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

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

配置Keycloak

第一步:為Spring Boot應用創建Realm,并在下面創建一個Client

7c1234cc-0580-11ee-8a94-dac502259ad0.png

第二步:創建一個SYS_ADMIN角色,并創建一個用戶賦予SYS_ADMIN角色

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

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

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

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

配置Spring Boot應用

第一步:創建一個Spring Boot應用,這個很簡單,這里不贅述了。

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

<dependency>
<groupId>org.springframework.securitygroupId>
<artifactId>spring-security-oauth2-joseartifactId>
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

第四步:創建一個需要鑒權的測試接口

@RequestMapping("/test")
@RestController
publicclassMySuperSecuredController{

@GetMapping("/hello")
publicStringhello(){
return"hello";
}

}

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

@Configuration
@EnableWebSecurity
publicclassWebSecurityConfig{


@Bean
publicSecurityFilterChainsecurityFilterChain(HttpSecurityhttpSecurity)throwsException{
httpSecurity
.authorizeHttpRequests(registry->registry
.requestMatchers("/test/**").hasRole("SYS_ADMIN")
.anyRequest().authenticated()
)
.oauth2ResourceServer(oauth2Configurer->oauth2Configurer.jwt(jwtConfigurer->jwtConfigurer.jwtAuthenticationConverter(jwt->{
Map>realmAccess=jwt.getClaim("realm_access");
Collectionroles=realmAccess.get("roles");
vargrantedAuthorities=roles.stream()
.map(role->newSimpleGrantedAuthority("ROLE_"+role))
.toList();
returnnewJwtAuthenticationToken(jwt,grantedAuthorities);
})))
;

returnhttpSecurity.build();
}
}

驗證一下

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

嘗試請求/test/hello接口:

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

小結

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


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 適配器
    +關注

    關注

    9

    文章

    2054

    瀏覽量

    69757
  • 框架
    +關注

    關注

    0

    文章

    404

    瀏覽量

    17903
  • spring
    +關注

    關注

    0

    文章

    340

    瀏覽量

    15090

原文標題:Spring Boot 3.1 中如何整合Spring Security和Keycloak

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Spring bootRedis的使用

    【本人禿頂程序員】springboot專輯:Spring bootRedis的使用
    發表于 03-27 11:42

    Mybatis整合spring的思路和步驟

    1、整合思路(1)SqlSessionFactory對象應該放到spring容器作為單例存在。(2)傳統dao的開發方式,應該從spring
    發表于 11-04 09:06

    啟動Spring Boot項目應用的三種方法

    ,從而使開發人員不再需要定義樣板化的配置。用我的話來理解,就是spring boot其實不是什么新的框架,它默認配置了很多框架的使用方式,就像maven整合了所有的jar包,spring
    發表于 01-14 17:33

    Spring Boot嵌入式Web容器原理是什么

    Spring Boot嵌入式Web容器原理Spring Boot的目標是構建“非常容易創建、獨立、產品級別的基于Spring的應用”。這些應
    發表于 12-16 07:57

    Spring Boot從零入門1 詳述

    在開始學習Spring Boot之前,我之前從未接觸過Spring相關的項目,Java基礎還是幾年前自學的,現在估計也忘得差不多了吧,寫Spring
    的頭像 發表于 12-10 22:18 ?858次閱讀

    Spring認證」什么是Spring GraphQL?

    這個項目建立在 Boot 2.x 上,但它應該與最新的 Boot2.4.x5 相關。 要創建項目,請轉到start.spring.io并為要使用的GraphQL傳輸選擇啟動器: 啟動機 運輸 執行
    的頭像 發表于 08-10 14:08 ?1040次閱讀
    「<b class='flag-5'>Spring</b>認證」什么是<b class='flag-5'>Spring</b> GraphQL?

    Spring Boot特有的實踐

    Spring Boot是最流行的用于開發微服務的Java框架。在本文中,我將與你分享自2016年以來我在專業開發中使用Spring Boot所采用的最佳實踐。這些內容是基于我的個人經驗
    的頭像 發表于 09-29 10:24 ?1171次閱讀

    強大的Spring Boot 3.0要來了

    和 Bugfix。 Spring Boot 3.0 的開發工作始于實驗性的 Spring Native,旨在為 GraalVM 原生鏡像提供支持。 在該版本,開發者現在可以使用標準
    的頭像 發表于 10-31 11:17 ?2344次閱讀

    Spring Boot整合兩種定時任務的方法

    框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具備這兩個 Spring 的定時任務實現策
    的頭像 發表于 04-07 14:55 ?1839次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b><b class='flag-5'>中</b><b class='flag-5'>整合</b>兩種定時任務的方法

    Spring Boot如何使用定時任務

    本文介紹在 Spring Boot 如何使用定時任務,使用非常簡單,就不做過多說明了。
    的頭像 發表于 04-12 10:56 ?1212次閱讀

    Spring Boot Actuator快速入門

    不知道大家在寫 Spring Boot 項目的過程,使用過 Spring Boot Actuator 嗎?知道
    的頭像 發表于 10-09 17:11 ?908次閱讀

    Spring Boot啟動 Eureka流程

    在上篇已經說過了 Eureka-Server 本質上是一個 web 應用的項目,今天就來看看 Spring Boot 是怎么啟動 Eureka 的。 Spring
    的頭像 發表于 10-10 11:40 ?1203次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>啟動 Eureka流程

    Spring Boot的啟動原理

    可能很多初學者會比較困惑,Spring Boot 是如何做到將應用代碼和所有的依賴打包成一個獨立的 Jar 包,因為傳統的 Java 項目打包成 Jar 包之后,需要通過 -classpath 屬性
    的頭像 發表于 10-13 11:44 ?937次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的啟動原理

    Spring Boot 的設計目標

    什么是Spring Boot Spring BootSpring 開源組織下的一個子項目,也是 S
    的頭像 發表于 10-13 14:56 ?801次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設計目標

    如何在Spring Boot應用程序整合ZXing庫

    在數字化時代,二維碼已經成為了信息交流的一種常見方式。它們被廣泛用于各種應用,從產品標簽到活動傳單,以及電子支付。本文將向您展示如何在Spring Boot應用程序整合ZXing庫,
    的頭像 發表于 12-03 17:39 ?1365次閱讀
    主站蜘蛛池模板: 五月婷婷六月综合 | 午夜欧美成人久久久久久 | 中文字幕卡二和卡三的视频 | 亚洲97在线 | 影院成人区精品一区二区婷婷丽春院影视 | 青草青青产国视频在线 | 亚洲一级色片 | 天堂网中文在线 | 欧美日韩免费大片 | 爽死你个放荡粗暴小淫视频 | 欧美精品成人a多人在线观看 | 五月激情久久 | 国产男人午夜视频在线观看 | 人人爱天天操 | 91po狼人社在线观看 | 亚洲邪恶天堂影院在线观看 | 亚洲成网777777国产精品 | 国产日本久久久久久久久婷婷 | 天天操天天摸天天碰 | 网女色| 午夜大片在线观看 | 四虎传媒| 成人久久网| 一区二区中文字幕在线观看 | 综合色久七七综合七七蜜芽 | 黄视频网站在线 | 婷婷综合激六月情网 | 免费欧美 | 最猛91大神ben与女教师 | 国产三级国产精品国产普男人 | 国产精品三级国语在线看 | 中国一级生活片 | 欧美yw193.c㎝在线观看 | 性xxxxhd高清 | 狠狠色噜噜噜噜狠狠狠狠狠狠奇米 | 色免费观看 | 午夜福利国产一级毛片 | 久久国产乱子伦精品免费强 | 久久免费视频99 | 永久免费av网站 | 四虎影片国产精品8848 |