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

如何自定義Spring Authorization Server登錄頁(yè)

 更新時(shí)間:2025年05月06日 09:33:42   作者:去哪里吃魚(yú)  
這篇文章主要介紹了如何自定義Spring Authorization Server登錄頁(yè),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

一、鳴謝

首先要聲明一些感謝:

感謝官方文檔的缺失、反復(fù)造成我下面這條感謝

感謝那些胡說(shuō)八道、顧彼失此的某DN文章,讓我在沖向坑里的道路上一往無(wú)前

廢話不多說(shuō),看劍!

本文來(lái)自:博客園-去哪里吃魚(yú)-自定義Spring Authorization Server登錄頁(yè)

二、版本信息

本文基于如下以來(lái)版本信息,官方代碼如有變動(dòng),請(qǐng)自行閱讀源碼解決問(wèn)題。

友情提示:不要照抄某DN、AI內(nèi)容,避免浪費(fèi)生命。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-oauth2-authorization-server</artifactId>
	<version>3.3.10</version>
</dependency>
<!-- 上面的依賴(lài)引用的 spring-security-oauth2-authorization-server 版本,這里只做提示,不用引入 -->
<dependency>
	<groupId>org.springframework.security</groupId>
	<artifactId>spring-security-oauth2-authorization-server</artifactId>
	<version>1.3.5</version>
</dependency>

三、過(guò)濾器鏈介紹

使用 Spring Authorization Server 開(kāi)發(fā)授權(quán)服務(wù)器,必然不可少要配置兩個(gè) SecurityFilterChain過(guò)濾器鏈:

  • SpringSecurity的過(guò)濾器鏈
  • 授權(quán)服務(wù)的過(guò)濾器鏈

這兩條過(guò)濾器鏈不會(huì)沖突,但是要確保授權(quán)服務(wù)器的過(guò)濾器鏈在SpringSecurity鏈之前加載,在代碼當(dāng)中可以使用@Order(0)注解來(lái)調(diào)整,注解中的整數(shù)參數(shù)越小,加載順序就越靠前

調(diào)整的目的是:

SpringSecurity的過(guò)濾器鏈默認(rèn)所有請(qǐng)求都需要認(rèn)證,把授權(quán)服務(wù)的過(guò)濾器鏈提前,可以避免如下默認(rèn)授權(quán)相關(guān)請(qǐng)求不受SpringSecurity的過(guò)濾器鏈影響

  • /oauth2/authorize
  • /oauth2/token
  • /oauth2/jwks
  • /userinfo
  • /login
  • ...

如下基于 授權(quán)碼 模式進(jìn)行開(kāi)發(fā),默認(rèn)的,以 GET 方式請(qǐng)求的 /login 是跳轉(zhuǎn)到登錄頁(yè),以 POST 方式請(qǐng)求的 /login 則是處理登錄請(qǐng)求,Spring 官方以硬編碼的形式提供了一個(gè)默認(rèn)登錄頁(yè),其中引用了bootstrap 樣式文件,鑒于一些眾所周知的原因,這個(gè)樣式文件訪問(wèn)不了,所以登錄頁(yè)加載會(huì)很慢。

此外,每個(gè)產(chǎn)品也會(huì)相應(yīng)的設(shè)計(jì)具有自己產(chǎn)品風(fēng)格特性的登錄頁(yè),這讓自定義登錄頁(yè)成為了一個(gè)硬性需求。

如下為 只修改登錄頁(yè) 的處理過(guò)程,一些項(xiàng)目配置如下

四、修改 SpringSecurity 配置

貼一段基于官方demo的修改后的配置代碼:

@Bean
@Order(2)
public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http)
	throws Exception {
	http
		.authorizeHttpRequests((authorize) -> authorize
			.requestMatchers("/i/**","/login**").permitAll()
			.anyRequest().authenticated()
		)
		.cors(AbstractHttpConfigurer::disable)
		.csrf(AbstractHttpConfigurer::disable)
		.formLogin(form -> form.loginPage("/i/login").loginProcessingUrl("/login"));
	return http.build();
}

現(xiàn)在來(lái)說(shuō)一下注意事項(xiàng):

  • 登錄頁(yè)請(qǐng)求由SpringSecurity的過(guò)濾器鏈處理,因?yàn)槭跈?quán)服務(wù)過(guò)濾器鏈沒(méi)有設(shè)置 formLogin,它只處理相關(guān)接口
  • 在配置 formLogin 的時(shí)候,loginPage 和 loginProcessingUrl 都需要配置,如果不配置 loginProcessingUrl,它則會(huì)用 loginPage 的 url來(lái)處理登錄請(qǐng)求
  • 除了登錄頁(yè)請(qǐng)求放開(kāi),登錄請(qǐng)求也要放開(kāi),交由授權(quán)服務(wù)過(guò)濾器鏈處理,在代碼中就是 requestMatchers("/i/**","/login**").permitAll()

五、修改 Spring Authorization Server 配置

同樣基于官方demo的修改后的配置:

@Bean
@Order(1)
public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
	OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
	http.getConfigurer(OAuth2AuthorizationServerConfigurer.class).oidc(withDefaults());
	http.exceptionHandling((exceptions) -> exceptions
		.defaultAuthenticationEntryPointFor(
			new LoginUrlAuthenticationEntryPoint(domain + "/auth/i/login"),
			new MediaTypeRequestMatcher(MediaType.TEXT_HTML)
		)
	)
	.oauth2ResourceServer((resourceServer) -> resourceServer.jwt(Customizer.withDefaults()));
	return http.build();
}

注意事項(xiàng)之在代碼 new LoginUrlAuthenticationEntryPoint(domain + "/auth/i/login") 中

  • domain 變量?jī)H在有需要的情況下使用,也可以不用
  • 構(gòu)造函數(shù)中的地址,一定一定要與上一章節(jié)中的 loginPage 地址相同,不要被 xxxEntryPoint 迷惑,這里就是指登錄頁(yè)地址!

六、其他

自定義授權(quán)確認(rèn)頁(yè)面不在此篇幅范圍之內(nèi),這個(gè)版本當(dāng)客戶端請(qǐng)求的 role 是一個(gè)值的時(shí)候不會(huì)出現(xiàn)授權(quán)確認(rèn)頁(yè)面。

我解決這種自定義問(wèn)題的思路:

研究 Spring Security 的配置方式,如:SecurityBuilder,SecurityConfiger,從而找到自己出現(xiàn)問(wèn)題所在的步驟,針對(duì)性的去調(diào)整

到此這篇關(guān)于自定義Spring Authorization Server登錄頁(yè)的文章就介紹到這了,更多相關(guān)自定義Spring Authorization Server登錄頁(yè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問(wèn)題

    Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問(wèn)題

    這篇文章主要介紹了Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • windows下vscode+vs2019開(kāi)發(fā)JNI的示例

    windows下vscode+vs2019開(kāi)發(fā)JNI的示例

    本文給大家普及windows下vscode+vs2019開(kāi)發(fā)JNI的示例以及各個(gè)環(huán)節(jié)的注意事項(xiàng),文章通過(guò)示例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-06-06
  • Java同步關(guān)鍵字synchronize底層實(shí)現(xiàn)原理解析

    Java同步關(guān)鍵字synchronize底層實(shí)現(xiàn)原理解析

    synchronized關(guān)鍵字對(duì)大家來(lái)說(shuō)并不陌生,當(dāng)我們遇到并發(fā)情況時(shí),優(yōu)先會(huì)想到用synchronized關(guān)鍵字去解決,synchronized確實(shí)能夠幫助我們?nèi)ソ鉀Q并發(fā)的問(wèn)題,接下來(lái)通過(guò)本文給大家分享java synchronize底層實(shí)現(xiàn)原理,感興趣的朋友一起看看吧
    2021-08-08
  • Java中最全最基礎(chǔ)的IO流概述和簡(jiǎn)介案例分析

    Java中最全最基礎(chǔ)的IO流概述和簡(jiǎn)介案例分析

    Java IO流用于程序與外部設(shè)備的數(shù)據(jù)交互,分為字節(jié)流(InputStream/OutputStream)和字符流(Reader/Writer),處理流(如緩沖流、對(duì)象流)增強(qiáng)功能,提供緩沖、序列化及編碼轉(zhuǎn)換,支持高效文件操作、網(wǎng)絡(luò)通信和國(guó)際化文本處理,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • JAVA中數(shù)組從小到大排序的2種方法實(shí)例

    JAVA中數(shù)組從小到大排序的2種方法實(shí)例

    JAVA中在運(yùn)用數(shù)組進(jìn)行排序功能時(shí)一般有多種解決方案,下面這篇文章主要給大家介紹了關(guān)于JAVA中數(shù)組從小到大排序的2種方法,文中都給出了詳細(xì)的實(shí)例代碼,需要的朋友可以參考下
    2023-03-03
  • Spring Security 自定義資源服務(wù)器實(shí)踐過(guò)程

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

    這篇文章主要介紹了Spring Security 自定義資源服務(wù)器實(shí)踐,我們通過(guò)自己搭建的授權(quán)服務(wù)器和資源服務(wù)器,完整體驗(yàn)了OAuth2流程,需要的朋友可以參考下
    2022-08-08
  • IDEA自定義Maven倉(cāng)庫(kù)的實(shí)現(xiàn)

    IDEA自定義Maven倉(cāng)庫(kù)的實(shí)現(xiàn)

    使用Maven進(jìn)行Java程序開(kāi)發(fā)時(shí),開(kāi)發(fā)者能夠極大地提高開(kāi)發(fā)效率,本文主要介紹了IDEA自定義Maven倉(cāng)庫(kù)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Java字符串技巧之刪除標(biāo)點(diǎn)或最后字符的方法

    Java字符串技巧之刪除標(biāo)點(diǎn)或最后字符的方法

    這篇文章主要介紹了Java字符串技巧之刪除標(biāo)點(diǎn)或最后字符的方法,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • Java基礎(chǔ)--反射機(jī)制

    Java基礎(chǔ)--反射機(jī)制

    本文主要介紹了Java反射機(jī)制的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-03-03
  • 詳解Spring Cloud Gateway修改請(qǐng)求和響應(yīng)body的內(nèi)容

    詳解Spring Cloud Gateway修改請(qǐng)求和響應(yīng)body的內(nèi)容

    這篇文章主要介紹了Spring Cloud Gateway修改請(qǐng)求和響應(yīng)body的內(nèi)容的相關(guān)資料,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09

最新評(píng)論

融水| 冷水江市| 和顺县| 衡水市| 京山县| 黄山市| 睢宁县| 三门县| 怀宁县| 高阳县| 库车县| 黔西| 搜索| 介休市| 凤冈县| 宣汉县| 汉源县| 松江区| 巩留县| 中西区| 澜沧| 祁东县| 大冶市| 徐汇区| 安塞县| 德令哈市| 庄浪县| 通州市| 佛坪县| 图们市| 东城区| 郎溪县| 邻水| 丰原市| 湄潭县| 江华| 莆田市| 连州市| 讷河市| 邹平县| 洛南县|