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

如何自定義Spring Authorization Server登錄頁

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

一、鳴謝

首先要聲明一些感謝:

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

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

廢話不多說,看劍!

本文來自:博客園-去哪里吃魚-自定義Spring Authorization Server登錄頁

二、版本信息

本文基于如下以來版本信息,官方代碼如有變動,請自行閱讀源碼解決問題。

友情提示:不要照抄某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>
<!-- 上面的依賴引用的 spring-security-oauth2-authorization-server 版本,這里只做提示,不用引入 -->
<dependency>
	<groupId>org.springframework.security</groupId>
	<artifactId>spring-security-oauth2-authorization-server</artifactId>
	<version>1.3.5</version>
</dependency>

三、過濾器鏈介紹

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

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

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

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

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

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

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

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

如下為 只修改登錄頁 的處理過程,一些項(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)在來說一下注意事項(xiàng):

  • 登錄頁請求由SpringSecurity的過濾器鏈處理,因?yàn)槭跈?quán)服務(wù)過濾器鏈沒有設(shè)置 formLogin,它只處理相關(guān)接口
  • 在配置 formLogin 的時候,loginPage 和 loginProcessingUrl 都需要配置,如果不配置 loginProcessingUrl,它則會用 loginPage 的 url來處理登錄請求
  • 除了登錄頁請求放開,登錄請求也要放開,交由授權(quán)服務(wù)過濾器鏈處理,在代碼中就是 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 變量僅在有需要的情況下使用,也可以不用
  • 構(gòu)造函數(shù)中的地址,一定一定要與上一章節(jié)中的 loginPage 地址相同,不要被 xxxEntryPoint 迷惑,這里就是指登錄頁地址!

六、其他

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

我解決這種自定義問題的思路:

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

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

相關(guān)文章

  • Java引用類型interface的用法總結(jié)

    Java引用類型interface的用法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Java中引用類型interface的用法的相關(guān)資料,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定幫助,感興趣的可以了解一下
    2022-10-10
  • 使用Post方式提交數(shù)據(jù)到Tomcat服務(wù)器的方法

    使用Post方式提交數(shù)據(jù)到Tomcat服務(wù)器的方法

    這篇將介紹使用Post方式提交數(shù)據(jù)到服務(wù)器,由于Post的方式和Get方式創(chuàng)建Web工程是一模一樣的,只用幾個地方的代碼不同,這篇文章主要介紹了使用Post方式提交數(shù)據(jù)到Tomcat服務(wù)器的方法,感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • springboot集成fastDfs過程代碼實(shí)例

    springboot集成fastDfs過程代碼實(shí)例

    這篇文章主要介紹了springboot集成fastDfs過程代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Java實(shí)現(xiàn)貪吃蛇游戲(1小時學(xué)會)

    Java實(shí)現(xiàn)貪吃蛇游戲(1小時學(xué)會)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)貪吃蛇游戲,1小時學(xué)會貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 舉例講解Java的JSON類庫GSON的基本用法

    舉例講解Java的JSON類庫GSON的基本用法

    GSON是谷歌在GitHub上開源的Java的JSON格式轉(zhuǎn)換類庫,能夠?qū)崿F(xiàn)Java對象向JSON的序列和反序列,這里我們就來舉例講解Java的JSON類庫GSON的基本用法:
    2016-06-06
  • springmvc4+hibernate4分頁查詢功能實(shí)現(xiàn)

    springmvc4+hibernate4分頁查詢功能實(shí)現(xiàn)

    本篇文章主要介紹了springmvc4+hibernate4分頁查詢功能實(shí)現(xiàn),Springmvc+hibernate成為現(xiàn)在很多人用的框架整合,有興趣的可以了解一下。
    2017-01-01
  • 一篇文章帶你了解java泛型--泛型類,泛型方法,泛型接口

    一篇文章帶你了解java泛型--泛型類,泛型方法,泛型接口

    這篇文章主要介紹了java泛型基礎(chǔ)知識及通用方法,從以下幾個方面介紹一下java的泛型: 基礎(chǔ), 泛型關(guān)鍵字, 泛型方法, 泛型類和接口,感興趣的可以了解一下
    2021-08-08
  • Springboot整合Shiro之加鹽MD5加密的方法

    Springboot整合Shiro之加鹽MD5加密的方法

    這篇文章主要介紹了Springboot整合Shiro之加鹽MD5加密的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-12-12
  • java面向?qū)ο蟮牧瓌t一法則小結(jié)

    java面向?qū)ο蟮牧瓌t一法則小結(jié)

    本篇文章主要對java面向?qū)ο蟮牧瓌t一法則進(jìn)行簡要說明,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • Java源碼解析之可重入鎖ReentrantLock

    Java源碼解析之可重入鎖ReentrantLock

    今天小編就為大家分享一篇關(guān)于Java源碼解析之可重入鎖ReentrantLock,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評論