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

詳解Spring Security的formLogin登錄認(rèn)證模式

 更新時間:2019年11月27日 08:57:20   作者:字母哥博客  
對于一個完整的應(yīng)用系統(tǒng),與登錄驗證相關(guān)的頁面都是高度定制化的,非常美觀而且提供多種登錄方式。這就需要Spring Security支持我們自己定制登錄頁面,也就是本文給大家介紹的formLogin模式登錄認(rèn)證模式,感興趣的朋友跟隨小編一起看看吧

一、formLogin的應(yīng)用場景

在本專欄之前的文章中,已經(jīng)給大家介紹過Spring Security的HttpBasic模式,該模式比較簡單,只是進(jìn)行了通過攜帶Http的Header進(jìn)行簡單的登錄驗證,而且沒有定制的登錄頁面,所以使用場景比較窄。

對于一個完整的應(yīng)用系統(tǒng),與登錄驗證相關(guān)的頁面都是高度定制化的,非常美觀而且提供多種登錄方式。這就需要Spring Security支持我們自己定制登錄頁面,也就是本文給大家介紹的formLogin模式登錄認(rèn)證模式。

準(zhǔn)備工作

  • 新建一個Spring Boot 的web應(yīng)用,引入Spring Security Starter。
  • 準(zhǔn)備一個login.html登錄頁面,頁面內(nèi)容非常簡單,一個from表單、用戶名和密碼輸入框,一個提交按鈕
  • 準(zhǔn)備一個首頁index.html,在登錄成功之后需要進(jìn)入index.html首頁
  • 首頁可以看到syslog(日志管理)、sysuer(用戶管理)、biz1(業(yè)務(wù)一)、biz2(業(yè)務(wù)二)四個頁面超文本鏈接選項。通過controller控制層跳轉(zhuǎn)頁面,并在對應(yīng)頁面寫一些標(biāo)志性文字即可,不需寫具體業(yè)務(wù)。

需求

  • 我們希望biz1(業(yè)務(wù)一)、biz2(業(yè)務(wù)二)普通的操作用戶user就可以訪問
  • 我們希望管理員可以訪問包括syslog(日志管理)和sysuser(用戶管理)在內(nèi)的所有資源

以上就是本文介紹formLogin模式需要進(jìn)行的準(zhǔn)備工作及需求,下面我們就來實(shí)現(xiàn)其中的核心的登錄驗證邏輯,準(zhǔn)備工作非常簡單請自行實(shí)現(xiàn)。(新建spring boot應(yīng)用,登錄頁面、首頁、四個業(yè)務(wù)頁面都寫成非常簡單的html即可,不用寫實(shí)際業(yè)務(wù)和樣式。)

二、說明

formLogin模式的三要素:

  • 登錄驗證邏輯
  • 資源訪問控制規(guī)則,如:資源權(quán)限、角色權(quán)限
  • 用戶信息

一般來說,使用權(quán)限認(rèn)證框架的的業(yè)務(wù)系統(tǒng)登錄驗證邏輯是固定的,而資源訪問控制規(guī)則和用戶信息是從數(shù)據(jù)庫或其他存儲介質(zhì)靈活加載的。但本文所有的用戶、資源、權(quán)限信息都是代碼配置寫死的,旨在為大家介紹formLogin認(rèn)證模式,如何從數(shù)據(jù)庫加載權(quán)限認(rèn)證相關(guān)信息我還會結(jié)合RBAC權(quán)限模型再寫文章的。

三、實(shí)現(xiàn)formLogin模式基礎(chǔ)配置

首先,我們要繼承WebSecurityConfigurerAdapter ,重寫configure(HttpSecurity http) 方法,該方法用來配置登錄驗證邏輯。請注意看下文代碼中的注釋信息。

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable() //禁用跨站csrf攻擊防御,后面的章節(jié)會專門講解
      .formLogin()
        .loginPage("/login.html")//用戶未登錄時,訪問任何資源都轉(zhuǎn)跳到該路徑,即登錄頁面
        .loginProcessingUrl("/login")//登錄表單form中action的地址,也就是處理認(rèn)證請求的路徑
        .usernameParameter("uname")///登錄表單form中用戶名輸入框input的name名,不修改的話默認(rèn)是username
        .passwordParameter("pword")//form中密碼輸入框input的name名,不修改的話默認(rèn)是password
        .defaultSuccessUrl("/index")//登錄認(rèn)證成功后默認(rèn)轉(zhuǎn)跳的路徑
        .and()
      .authorizeRequests()
        .antMatchers("/login.html","/login").permitAll()//不需要通過登錄驗證就可以被訪問的資源路徑
        .antMatchers("/biz1").hasAnyAuthority("biz1") //前面是資源的訪問路徑、后面是資源的名稱或者叫資源ID
        .antMatchers("/biz2").hasAnyAuthority("biz2")
        .antMatchers("/syslog").hasAnyAuthority("syslog")
        .antMatchers("/sysuser").hasAnyAuthority("sysuser")
        .anyRequest().authenticated();
  }
}

上面的代碼分為兩部分:

第一部分是formLogin配置段,用于配置登錄驗證邏輯相關(guān)的信息。如:登錄頁面、登錄成功頁面、登錄請求處理路徑等。

第二部分是authorizeRequests配置端,用于配置資源的訪問權(quán)限。如:開發(fā)登錄頁面的permitAll開放訪問,“/biz1”(業(yè)務(wù)一頁面資源)需要有資源ID為"biz1"的用戶才可以訪問。

這時候,我們通過瀏覽器訪問,隨便測試一個沒有訪問權(quán)限的資源,都會跳轉(zhuǎn)到login.html頁面。

四、實(shí)現(xiàn)資源訪問限制的需求

在上文中,我們配置了登錄驗證及資源訪問的權(quán)限規(guī)則,我們還沒有具體的用戶,下面我們就來配置具體的用戶。重寫WebSecurityConfigurerAdapter的 configure(AuthenticationManagerBuilder auth)方法

public void configure(AuthenticationManagerBuilder auth) throws Exception {
  auth.inMemoryAuthentication()
    .withUser("user").password(passwordEncoder().encode("123456")).authorities("biz1","biz2")
    .and()
    .passwordEncoder(passwordEncoder());//配置BCrypt加密
}
@Bean
public PasswordEncoder passwordEncoder(){
  return new BCryptPasswordEncoder();
}
inMemoryAuthentication指的是在內(nèi)存里面存儲用戶的身份認(rèn)證和授權(quán)信息。
withUser("user")用戶名是user
password(passwordEncoder().encode("123456"))密碼是加密之后的123456
authorities("biz1","biz2")指的是user用戶擁有資源ID為biz1(業(yè)務(wù)一)和biz2(業(yè)務(wù)二)資源的權(quán)限

這樣,我們就實(shí)現(xiàn)了文首提出的普通用戶只能訪問biz1(業(yè)務(wù)一)和biz2(業(yè)務(wù)二)資源的需求。那么管理員用戶可以訪問所有的資源的配置方式,你會不會呢?同樣的配方、同樣的方式、自己可以嘗試一下哦!

五、靜態(tài)資源訪問

在我們的實(shí)際開發(fā)中,登錄頁面login.html和控制層Controller登錄驗證'/login'都必須無條件的開放。除此之外,一些靜態(tài)資源如css、js文件通常也都不需要驗證權(quán)限,我們需要將它們的訪問權(quán)限也開放出來。下面就是實(shí)現(xiàn)的方法:重寫WebSecurityConfigurerAdapter類的configure(WebSecurity web) 方法

  @Override
  public void configure(WebSecurity web) {
    //將項目中靜態(tài)資源路徑開放出來
    web.ignoring().antMatchers("/config/**", "/css/**", "/fonts/**", "/img/**", "/js/**");
  }

總結(jié)

以上所述是小編給大家介紹的Spring Security的formLogin登錄認(rèn)證模式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Spring Boot 配置 IDEA和DevTools 熱部署的方法

    Spring Boot 配置 IDEA和DevTools 熱部署的方法

    這篇文章主要介紹了Spring Boot 配置 IDEA和DevTools 熱部署的方法,需要的朋友可以參考下
    2018-02-02
  • JAVA獲取本地MAC地址的方法

    JAVA獲取本地MAC地址的方法

    這篇文章主要介紹了JAVA獲取本地MAC地址的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • SpringBoot2.x入門教程之引入jdbc模塊與JdbcTemplate簡單使用方法

    SpringBoot2.x入門教程之引入jdbc模塊與JdbcTemplate簡單使用方法

    這篇文章主要介紹了SpringBoot2.x入門教程之引入jdbc模塊與JdbcTemplate簡單使用方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot?MongoCustomConversions自定義轉(zhuǎn)換方式

    SpringBoot?MongoCustomConversions自定義轉(zhuǎn)換方式

    這篇文章主要介紹了SpringBoot?MongoCustomConversions自定義轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java并發(fā)系列之JUC中的Lock鎖與synchronized同步代碼塊問題

    Java并發(fā)系列之JUC中的Lock鎖與synchronized同步代碼塊問題

    這篇文章主要介紹了Java并發(fā)系列之JUC中的Lock鎖與synchronized同步代碼塊,簡單介紹了lock鎖及鎖的底層知識,結(jié)合案例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Java獲取CPU和內(nèi)存占用率最簡單的方法

    Java獲取CPU和內(nèi)存占用率最簡單的方法

    這篇文章主要介紹了Java獲取CPU和內(nèi)存占用率最簡單的方法,文中通過代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • 如何使用Docker部署Java項目

    如何使用Docker部署Java項目

    在接觸了docker后,干什么都想用docker來弄,這篇文章主要給大家介紹了關(guān)于如何使用Docker部署Java項目的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 關(guān)于IDEA配置Hibernate中遇到的問題解決

    關(guān)于IDEA配置Hibernate中遇到的問題解決

    這篇文章主要給大家介紹了關(guān)于IDEA配置Hibernate中遇到的問題,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 千萬別這樣使用Arrays.asList詳解

    千萬別這樣使用Arrays.asList詳解

    這篇文章主要給大家介紹了關(guān)于為什么說千萬別這樣使用Arrays.asList()的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 源碼解析Java類加載器

    源碼解析Java類加載器

    這篇文章主要給大家介紹了Java類加載器源碼解析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評論