這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)使用SpringSecurity怎么自定義一個(gè)表單登錄功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
10年積累的網(wǎng)站建設(shè)、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有獨(dú)山子免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。1.創(chuàng)建SpringSecurity項(xiàng)目
1.1 使用IDEA
先通過(guò)IDEA 創(chuàng)建一個(gè)SpringBoot項(xiàng)目 并且依賴SpringSecurity,Web依賴
此時(shí)pom.xml會(huì)自動(dòng)添加
org.springframework.boot spring-boot-starter-security
2.擴(kuò)展 WebSecurityConfigurerAdapter
WebSecurityConfigurerAdapter 是SpringSecurity 提供的用于我們擴(kuò)展自己的配置
?實(shí)現(xiàn)WebSecurityConfigurerAdapter經(jīng)常需要重寫的:
1、configure(AuthenticationManagerBuilder auth);
2、configure(WebSecurity web);
3、configure(HttpSecurity http);
2.1 默認(rèn) WebSecurityConfigurerAdapter 為我們提供了一些基礎(chǔ)配置如下
protected void configure(HttpSecurity http) throws Exception { logger.debug("Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity)."); http .authorizeRequests() .anyRequest().authenticated() .and() .formLogin().and() .httpBasic(); }
2.2 創(chuàng)建自定義的 WebSecurityConfigurer
1.formLogin() 開(kāi)啟表單登錄,該方法會(huì)應(yīng)用 FormLoginConfigurer 到HttpSecurity上,后續(xù)會(huì)被轉(zhuǎn)換為對(duì)應(yīng)的Filter
2.loginPage() 配置自定義的表單頁(yè)面
3.authorizeRequests().anyRequest().authenticated(); 表示任何請(qǐng)求接口都要認(rèn)證**
@Configuration @Slf4j public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .formLogin() .loginPage("/mylogin.html") .and() .authorizeRequests().anyRequest().authenticated(); } }
2.3 mylogin.html
Title 標(biāo)準(zhǔn)登錄頁(yè)面
表單登錄
3.訪問(wèn)自定義登錄頁(yè)面(注意有重定向過(guò)多問(wèn)題)
啟動(dòng)項(xiàng)目 并且直接訪問(wèn)
http://localhost:8080
會(huì)發(fā)現(xiàn)瀏覽器報(bào) 重定向次數(shù)過(guò)多,這是什么原因呢?
這是因?yàn)?我們上面配置了 loginPage("/mylogin.html") ,但是這個(gè)路徑它沒(méi)有被允許訪問(wèn),也就是當(dāng)重定向到/mylogin.html路徑后,還是會(huì)因?yàn)樾枰J(rèn)證 被重定向道 /mylogin.html 導(dǎo)致該錯(cuò)誤
4.允許登錄頁(yè)面路徑訪問(wèn) antMatchers("/mylogin.html").permitAll()
只需要在配置的地方 添加 .antMatchers("/mylogin.html").permitAll() 允許這個(gè)路徑
http.csrf().disable() .formLogin() .loginPage("/mylogin.html") .and() .authorizeRequests() .antMatchers("/mylogin.html").permitAll() .anyRequest().authenticated();
再次訪問(wèn),我們自定義的表單就顯示出來(lái)了(忽略樣式。。。)
此時(shí)我們輸入用戶名 user 密碼 : 控制臺(tái)打印
Using generated security password: 6bf253eb-c785-42b6-b147-b0fe2971586e
發(fā)現(xiàn)又跳轉(zhuǎn)到 /mylogin.html頁(yè)面,這是因?yàn)?當(dāng)我們配置了 loginPage("/mylogin.html")之后 處理表單登錄的過(guò)濾器它所攔截的請(qǐng)求就不再是 /login (默認(rèn)是 /login) ,攔截的登錄請(qǐng)求地址變成了 和 loginPage一樣的 mylogin.html
此時(shí)如果將 action地址改成 /mylogin.html ,那么再登錄 就能成功