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

Spring Security 自定義資源服務(wù)器實(shí)踐過程

 更新時(shí)間:2022年08月22日 10:05:47   作者:阿提說說  
這篇文章主要介紹了Spring Security 自定義資源服務(wù)器實(shí)踐,我們通過自己搭建的授權(quán)服務(wù)器和資源服務(wù)器,完整體驗(yàn)了OAuth2流程,需要的朋友可以參考下

前言

在前面我們使用最小化配置的方式搭建了自己的授權(quán)服務(wù)器,現(xiàn)在我們依舊用最小化的方式配置自己的資源服務(wù)器。
資源服務(wù)器負(fù)責(zé)scope的鑒權(quán)、authorities的鑒權(quán)、基于用戶角色的鑒權(quán)等。

最小化配置

安裝資源服務(wù)器

1、 新建一個(gè)Spring Boot項(xiàng)目,命名為spring-security-resource-server
2、引入pom.xml依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

其中與授權(quán)服務(wù)器依賴不同的是,資源服務(wù)器有spring boot版本,版本號(hào)會(huì)有spring boot進(jìn)行管理,不需要顯示聲明。

配置資源服務(wù)器

1、配置application.yml 文件

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: http://localhost:9000

該配置用于指定授權(quán)服務(wù)器地址,資源服務(wù)器將從該地址獲取JWT令牌,并根據(jù)JWT中的屬性進(jìn)一步自我配置,發(fā)現(xiàn)授權(quán)服務(wù)器的公鑰、驗(yàn)證JWT令牌。

2、創(chuàng)建配置類

@EnableWebSecurity(debug = true)
public class ResoruceServerConfig {
    @Bean
    SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .mvcMatchers("/userinfo/**").hasAuthority("SCOPE_userinfo")
                .and()
                .oauth2ResourceServer()
                .jwt();
        return http.build();
    }
}

.mvcMatchers("/userinfo/**").hasAuthority("SCOPE_userinfo")匹配/userinfo/**地址,允許訪問范圍是SCOPE_userinfo
oauth2ResourceServer()定義為資源服務(wù)器
jwt()使用JWT令牌

3、 創(chuàng)建一個(gè)資源接口
/userinfo/用來獲取資源所有者基本信息

@Data
public class UserInfoRes {

    private String username;
}

創(chuàng)建Rest接口

@RestController
public class UserInfoController {

    @GetMapping("/userinfo")
    public UserInfoRes getUserInfo() {
        UserInfoRes userInfoRes = new UserInfoRes();
        userInfoRes.setUsername("阿提說說");
        return userInfoRes;
    }
}

配置客戶端

目前我們客戶端的配置是這樣的:

spring:
  security:
    oauth2:
      client:
        registration:
          gitee:
            client-id: gitee_clientId
            client-secret: gitee_secret
            authorization-grant-type: authorization_code
            redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
            client-name: Gitee
          github:
            client-id: github_clientId
            client-secret: github_secret
          # 自定義
          customize:
            client-id: testClientId
            client-secret: testClientSecret
            authorization-grant-type: authorization_code
            redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
            client-name: Customize
            scope:
              - userinfo
        provider:
          gitee:
            authorization-uri: https://gitee.com/oauth/authorize
            token-uri: https://gitee.com/oauth/token
            user-info-uri: https://gitee.com/api/v5/user
            user-name-attribute: name
          # 自定義
          customize:
            authorization-uri: http://localhost:9000/oauth2/authorize
            token-uri: http://localhost:9000/oauth2/token
            user-info-uri: http://localhost:9000/userinfo
            user-name-attribute: username

這里我們只需要修改customize部分的user-info-uriuser-name-attribute
調(diào)整后配置如下,其他部分跟原來是一樣的。

          customize:
            authorization-uri: http://localhost:9000/oauth2/authorize
            token-uri: http://localhost:9000/oauth2/token
            user-info-uri: http://localhost:8090/userinfo
            user-name-attribute: username

? user-name-attribute的名字,必須在user-info-uri返回的屬性名中存在

整流程體驗(yàn)

在如上三部分配置完成后,就可以體驗(yàn)了,啟動(dòng)spring-security-resource-server、spring-security-authorization-server、spring-security-oauth2-client

瀏覽器訪問地址:http://127.0.0.1:8080/hello,在授權(quán)完成后,即跳轉(zhuǎn)回并顯示結(jié)果。

image.png

ResourceServer下能看到帶著token的/userinfo請(qǐng)求日志。

************************************************************
Request received for GET '/userinfo':
org.apache.catalina.connector.RequestFacade@3418bfc9
servletPath:/userinfo
pathInfo:null
headers: 
accept: application/json
authorization: Bearer eyJraWQiOiI5YjZjZWMzNi05ZDYyLTRkMWMtOWRiNi0wMWM1ODQzMDc1N2UiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiYXVkIjoidGVzdENsaWVudElkIiwibmJmIjoxNjYwOTU1ODQyLCJzY29wZSI6WyJ1c2VyaW5mbyJdLCJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6OTAwMCIsImV4cCI6MTY2MDk1NjE0MiwiaWF0IjoxNjYwOTU1ODQyfQ.gVWwwfzB-xNuWWUBpgGokIOy5xwV9Wkd05k3rqpk1h92b-TWENB4ZArEL--zpngSyE8iuml0vG3veCv647FDx_EY56ClM-UxH-3Wq0D2f3b6WTgFO5RpCCwRLCHahBlV5g9plr7hWYY5uX2cQ4MsC4-ltZSR6wga5LSLDB-bIK46ZmJ3DOaQFwTTCpWB4OgOuq1j59i9XkgDUc_I8WUsHB4eEDEbBJeOmdimDn5O1Ux6nDhPgLMLcpnrt3lHLmXDTk8Q7hX7YBynO2VBm6wkTeYP4a2rfinfhW-LtF1o3hm8QAY0hn1QKSEeWU5K5qiIOVeSJ5FqrYJ_VQPadT1qAQ
user-agent: Java/11
host: localhost:8090
connection: keep-alive
Security filter chain: [
  DisableEncodeUrlFilter
  WebAsyncManagerIntegrationFilter
  SecurityContextPersistenceFilter
  HeaderWriterFilter
  CsrfFilter
  LogoutFilter
  BearerTokenAuthenticationFilter
  RequestCacheAwareFilter
  SecurityContextHolderAwareRequestFilter
  AnonymousAuthenticationFilter
  SessionManagementFilter
  ExceptionTranslationFilter
  FilterSecurityInterceptor
]
************************************************************

總結(jié)

到此,我們通過自己搭建的授權(quán)服務(wù)器和資源服務(wù)器,完整體驗(yàn)了OAuth2流程,再來體會(huì)下第一篇文章中說明的交互流程。

在這里插入圖片描述

在整個(gè)流程中,我們使用的是最嚴(yán)密的授權(quán)碼模式,它將用戶引導(dǎo)到授權(quán)服務(wù)器進(jìn)行身份驗(yàn)證,授權(quán)服務(wù)器將發(fā)放的訪問令牌傳遞給客戶端,目前主流都是使用該模式,因此特別重要,要好好體會(huì)

在這里插入圖片描述

源代碼地址:https://github.com/jujunchen/21Study

到此這篇關(guān)于Spring Security 自定義資源服務(wù)器實(shí)踐過程的文章就介紹到這了,更多相關(guān)Spring Security 自定義資源服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring注解之@Lazy注解使用解析

    Spring注解之@Lazy注解使用解析

    這篇文章主要介紹了Spring注解之@Lazy注解使用解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java之實(shí)現(xiàn)十進(jìn)制與十六進(jìn)制轉(zhuǎn)換案例講解

    Java之實(shí)現(xiàn)十進(jìn)制與十六進(jìn)制轉(zhuǎn)換案例講解

    這篇文章主要介紹了Java之實(shí)現(xiàn)十進(jìn)制與十六進(jìn)制轉(zhuǎn)換案例講解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Springboot微服務(wù)分布式框架Rouyi Cloud權(quán)限認(rèn)證(登錄流程之token解析)

    Springboot微服務(wù)分布式框架Rouyi Cloud權(quán)限認(rèn)證(登錄流程之token解析)

    這篇文章主要介紹了Springboot微服務(wù)分布式框架Rouyi Cloud權(quán)限認(rèn)證的相關(guān)知識(shí),重點(diǎn)講解下整個(gè)框架的入口,登錄流程之token解析,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • SpringBoot深入分析講解監(jiān)聽器模式下

    SpringBoot深入分析講解監(jiān)聽器模式下

    監(jiān)聽器模式,大家應(yīng)該并不陌生,主要的組成要素包括了事件、監(jiān)聽器以及廣播器;當(dāng)事件發(fā)生時(shí),廣播器負(fù)責(zé)將事件傳遞給所有已知的監(jiān)聽器,而監(jiān)聽器會(huì)對(duì)自己感興趣的事件進(jìn)行處理
    2022-07-07
  • Java?在?Array?和?Set?之間進(jìn)行轉(zhuǎn)換的示例

    Java?在?Array?和?Set?之間進(jìn)行轉(zhuǎn)換的示例

    這篇文章主要介紹了Java如何在Array和Set之間進(jìn)行轉(zhuǎn)換,在本文章中,我們對(duì)如何在?Java?中對(duì)Array和Set進(jìn)行轉(zhuǎn)換進(jìn)行一些說明和示例,需要的朋友可以參考下
    2023-05-05
  • SpringBoot項(xiàng)目依賴和配置最新示例講解

    SpringBoot項(xiàng)目依賴和配置最新示例講解

    這篇文章主要介紹了SpringBoot項(xiàng)目依賴和配置,這里主要是搭建項(xiàng)目常用到的maven依賴以及搭建項(xiàng)目會(huì)需要用到的一些配置文件,本文通過示例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2022-11-11
  • java中Struts2文件上傳問題詳解

    java中Struts2文件上傳問題詳解

    文件上傳和文件下載是我們?cè)趙eb應(yīng)用程序中常用的兩個(gè)功能,在java中,實(shí)現(xiàn)這兩種功能的方式也有很多種,其中struts2就給我們提供了一種算是比較簡單的方式吧,下面我們就一起來看一下,
    2015-07-07
  • 關(guān)于JSONObject.toJSONString出現(xiàn)地址引用問題

    關(guān)于JSONObject.toJSONString出現(xiàn)地址引用問題

    這篇文章主要介紹了關(guān)于JSONObject.toJSONString出現(xiàn)地址引用問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • JDK13的新特性之AppCDS詳解

    JDK13的新特性之AppCDS詳解

    AppCDS的全稱是Application Class-Data Sharing。主要是用來在不同的JVM中共享Class-Data信息,從而提升應(yīng)用程序的啟動(dòng)速度。這篇文章主要介紹了JDK13的新特性:AppCDS詳解,需要的朋友可以參考下
    2020-05-05
  • SpringBoot2+Netty+WebSocket(netty實(shí)現(xiàn)websocket支持URL參數(shù))問題記錄

    SpringBoot2+Netty+WebSocket(netty實(shí)現(xiàn)websocket支持URL參數(shù))問題記錄

    Netty?是一個(gè)利用?Java?的高級(jí)網(wǎng)絡(luò)的能力,隱藏其背后的復(fù)雜性而提供一個(gè)易于使用的?API?的客戶端/服務(wù)器框架,這篇文章主要介紹了SpringBoot2+Netty+WebSocket(netty實(shí)現(xiàn)websocket,支持URL參數(shù)),需要的朋友可以參考下
    2023-12-12

最新評(píng)論

新密市| 睢宁县| 聊城市| 牙克石市| 汶川县| 蓝田县| 朔州市| 德化县| 田阳县| 长沙市| 清新县| 炎陵县| 宜阳县| 鸡西市| 新平| 梨树县| 永济市| 文水县| 青铜峡市| 曲阳县| 罗平县| 新丰县| 连云港市| 松原市| 牟定县| 三亚市| 张家口市| 沁源县| 邵阳市| 张北县| 临桂县| 南开区| 新野县| 竹北市| 安陆市| 彩票| 屯昌县| 河北区| 上犹县| 克拉玛依市| 抚顺县|