十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章給大家介紹SpringSecurity中怎么自定義表單登錄,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
10年積累的網(wǎng)站設計制作、成都網(wǎng)站設計經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站制作后付款的網(wǎng)站建設流程,更有東洲免費網(wǎng)站建設讓你可以放心的選擇與我們合作。
1.創(chuàng)建SpringSecurity項目
1.1 使用IDEA
先通過IDEA 創(chuàng)建一個SpringBoot項目 并且依賴SpringSecurity,Web依賴
此時pom.xml會自動添加
2.擴展 WebSecurityConfigurerAdapter
WebSecurityConfigurerAdapter 是SpringSecurity 提供的用于我們擴展自己的配置
?實現(xiàn)WebSecurityConfigurerAdapter經(jīng)常需要重寫的:
1、configure(AuthenticationManagerBuilder auth);
2、configure(WebSecurity web);
3、configure(HttpSecurity http);
2.1 默認 WebSecurityConfigurerAdapter 為我們提供了一些基礎配置如下
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() 開啟表單登錄,該方法會應用 FormLoginConfigurer 到HttpSecurity上,后續(xù)會被轉(zhuǎn)換為對應的Filter2.loginPage() 配置自定義的表單頁面 3.authorizeRequests().anyRequest().authenticated(); 表示任何請求接口都要認證**
@Configuration@Slf4jpublic class MyWebSecurityConfig extends WebSecurityConfigurerAdapter { @Overrideprotected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .formLogin() .loginPage("/mylogin.html") .and() .authorizeRequests().anyRequest().authenticated(); }}
2.3 mylogin.html
3.訪問自定義登錄頁面(注意有重定向過多問題)
啟動項目 并且直接訪問
http://localhost:8080
會發(fā)現(xiàn)瀏覽器報 重定向次數(shù)過多,這是什么原因呢?
這是因為 我們上面配置了 loginPage("/mylogin.html") ,但是這個路徑它沒有被允許訪問,也就是當重定向到/mylogin.html路徑后,還是會因為需要認證 被重定向道 /mylogin.html 導致該錯誤
4.允許登錄頁面路徑訪問 antMatchers("/mylogin.html").permitAll()
只需要在配置的地方 添加 .antMatchers("/mylogin.html").permitAll() 允許這個路徑
http.csrf().disable() .formLogin() .loginPage("/mylogin.html") .and() .authorizeRequests() .antMatchers("/mylogin.html").permitAll() .anyRequest().authenticated();
再次訪問,我們自定義的表單就顯示出來了(忽略樣式。。。)
此時我們輸入用戶名 user 密碼 : 控制臺打印
Using generated security password: 6bf253eb-c785-42b6-b147-b0fe2971586e
發(fā)現(xiàn)又跳轉(zhuǎn)到 /mylogin.html頁面,這是因為 當我們配置了 loginPage("/mylogin.html")之后 處理表單登錄的過濾器它所攔截的請求就不再是 /login (默認是 /login) ,攔截的登錄請求地址變成了 和 loginPage一樣的 mylogin.html
此時如果將 action地址改成 /mylogin.html ,那么再登錄 就能成功