Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
關(guān)注此頭條號(hào)“互聯(lián)網(wǎng)IT信息”——>私信發(fā)送 “京東html” ,即可得到源代碼的獲取方式。
本專欄前篇文章中介紹了HttpBasic模式,該模式比較簡(jiǎn)單,只是進(jìn)行了通過(guò)攜帶Http的Header進(jìn)行簡(jiǎn)單的登錄驗(yàn)證,而且沒(méi)有可以定制的登錄頁(yè)面,所以使用場(chǎng)景比較窄。
對(duì)于一個(gè)完整的應(yīng)用系統(tǒng),與登錄驗(yàn)證相關(guān)的頁(yè)面都是高度定制化的,非常美觀而且提供多種登錄方式。這就需要Spring Security支持我們自己定制登錄頁(yè)面,也就是本文給大家介紹的FormLogin模式登錄認(rèn)證模式。
在介紹相關(guān)內(nèi)容之前,需要先搭建一個(gè)demo,新建一個(gè)項(xiàng)目spring-security-02,需要添加依賴如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
復(fù)制代碼
除此之外其實(shí)還需要添加web、thymeleaf的依賴,這里就不在貼出來(lái)了
demo結(jié)構(gòu)如下:
這里不再使用Security默認(rèn)的頁(yè)面,自己定制一個(gè),代碼如下:
單純的一個(gè)表單登錄頁(yè)面,需要注意以下幾個(gè)參數(shù):
以上三個(gè)參數(shù)都可以在security通過(guò)配置的方式定義
這個(gè)是登錄成功后跳轉(zhuǎn)的首頁(yè),代碼如下:
在security中一切的接口都稱之為資源,下面新建兩個(gè)測(cè)試接口,代碼如下:
在介紹如何配置之前,先來(lái)看下formLogin模式登錄的5個(gè)要素:
一般來(lái)說(shuō),使用權(quán)限認(rèn)證框架的的業(yè)務(wù)系統(tǒng)登錄驗(yàn)證邏輯是固定的,而資源訪問(wèn)控制規(guī)則和用戶信息是從數(shù)據(jù)庫(kù)或其他存儲(chǔ)介質(zhì)靈活加載的。但本文所有的用戶、資源、權(quán)限信息都是代碼配置寫死的,旨在為大家介紹formLogin認(rèn)證模式,如何從數(shù)據(jù)庫(kù)加載權(quán)限認(rèn)證相關(guān)信息我還會(huì)結(jié)合RBAC權(quán)限模型再寫文章的。
針對(duì)上述5個(gè)的要素,formLogin配置代碼如下:
首先,我們要繼承WebSecurityConfigurerAdapter ,重寫configure(HttpSecurity http) 方法,該方法用來(lái)配置登錄驗(yàn)證邏輯。請(qǐng)注意看代碼中的注釋信息。
上述代碼分為兩個(gè)部分:
第一部分是formLogin配置段,用于配置登錄驗(yàn)證邏輯相關(guān)的信息。如:登錄頁(yè)面、登錄成功頁(yè)面、登錄請(qǐng)求處理路徑等。
第二部分是authorizeRequests配置段,用于配置資源的訪問(wèn)控制規(guī)則
在上述的規(guī)則中配置了一些資源需要特定的角色才可以訪問(wèn),比如user、admin,那么這些角色如何去指定呢?
在security中提供了配置的方式,代碼如下:
上述的代碼配置很簡(jiǎn)單,創(chuàng)建了兩個(gè)用戶且指定了角色,分別如下:
配置解釋如下:
按照上述6個(gè)步驟基本實(shí)現(xiàn)了一個(gè)表單登錄,下面測(cè)試一下
瀏覽器訪問(wèn)http://localhost:8081/hello2,第一次訪問(wèn)由于未登錄會(huì)自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面,如下圖:
輸入用戶名和密碼,由于/hello2這個(gè)資源需要admin的角色才能訪問(wèn),因此必須用admin這個(gè)用戶登錄,否則將會(huì)報(bào)403的錯(cuò)誤,登錄成功后將能夠正常訪問(wèn)
如果用戶名或者密碼錯(cuò)誤將會(huì)觸發(fā).failureUrl("/login/page")這個(gè)配置,自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面
在第5步的配置中,和登錄結(jié)果相關(guān)的配置有如下兩個(gè):
這兩個(gè)配置都是指定URL的方式:
但是在web應(yīng)用開(kāi)發(fā)過(guò)程中需求是千變?nèi)f化的,有時(shí)需要我們針對(duì)登錄結(jié)果做個(gè)性化處理,比如:
因此需要自定義的登錄結(jié)果,這篇文章先介紹如何定制跳轉(zhuǎn)頁(yè)面,關(guān)于JSON格式數(shù)據(jù)就是前后端分離架構(gòu)下需要用到,后文介紹
AuthenticationSuccessHandler接口是Security提供的認(rèn)證成功處理器接口,我們只需要去實(shí)現(xiàn)它即可。但是通常來(lái)說(shuō),我們不會(huì)直接去實(shí)現(xiàn)AuthenticationSuccessHandler接口,而是繼承SavedRequestAwareAuthenticationSuccessHandler 類,這個(gè)類會(huì)記住用戶上一次請(qǐng)求的資源路徑,比如/hello2這個(gè)路徑,登錄成功后將會(huì)自動(dòng)跳轉(zhuǎn)到/hello2這個(gè)頁(yè)面而不是首頁(yè)
代碼如下:
這里我們同樣沒(méi)有直接實(shí)現(xiàn)AuthenticationFailureHandler接口,而是繼承SimpleUrlAuthenticationFailureHandler 類。該類中默認(rèn)實(shí)現(xiàn)了登錄驗(yàn)證失敗的跳轉(zhuǎn)邏輯,即登陸失敗之后回到登錄頁(yè)面。我們可以利用這一點(diǎn)簡(jiǎn)化我們的代碼。
代碼如下:
配置如下:
將自定義的AuthenticationSuccessHandler和AuthenticationFailureHandler注入到Spring Security配置類中
使用formlogin模式,配置successHandler和failureHandler。
不要配置defaultSuccessUrl和failureUrl,否則自定義handler將失效。handler配置與URL配置只能二選一
本篇文章介紹了Spring Security 的 formLogin的配置方式,需要注意的是這里不支持前后端分離架構(gòu),關(guān)于前后端分離架構(gòu)如何整合,后文會(huì)介紹
來(lái)源:https://juejin.cn/post/7140096326829621261
度收錄的文章多種多樣,排名將顯示在搜索結(jié)果中。然而,有一個(gè)方面是確定的,那就是,網(wǎng)站首頁(yè)的內(nèi)容將首先顯示。因此,我們應(yīng)該注意網(wǎng)站的登錄頁(yè)面設(shè)計(jì)。簡(jiǎn)而言之,網(wǎng)站的登錄頁(yè)實(shí)際上是網(wǎng)站的主頁(yè),其中一些是網(wǎng)站的專欄頁(yè)。無(wú)論是主頁(yè)還是其他頁(yè)面,都會(huì)有一個(gè)共同而突出的特點(diǎn),即網(wǎng)站的登錄頁(yè)面內(nèi)容非常豐富,其中大部分以標(biāo)題的形式存在,并起到導(dǎo)航的作用。
網(wǎng)站的登陸頁(yè)面不僅要求內(nèi)容豐富,而且在視覺(jué)效果的設(shè)計(jì)上要求美感和良好印象,以吸引用戶深入訪問(wèn)頁(yè)面,為網(wǎng)站贏得忠誠(chéng)用戶。讓我們來(lái)分析一下企業(yè)網(wǎng)站建設(shè)登陸頁(yè)面設(shè)計(jì)的一些技巧。
首先,網(wǎng)站登錄頁(yè)面的頭部設(shè)計(jì)。登錄頁(yè)的內(nèi)容必須有LOGO。企業(yè)網(wǎng)站應(yīng)向用戶展示企業(yè)標(biāo)識(shí),以便用戶一進(jìn)入網(wǎng)站就知道它是什么樣的網(wǎng)站,并向用戶傳達(dá)網(wǎng)站的主要業(yè)務(wù)是什么。網(wǎng)站的口號(hào)必須靠近logo,這樣才能與其他企業(yè)區(qū)分開(kāi)來(lái),并看到與同行的差異。右邊可以是企業(yè)的聯(lián)系方式,通常是企業(yè)的400電話號(hào)碼,這也是企業(yè)實(shí)力的展示。
其次,網(wǎng)站的登錄頁(yè)必須有橫幅圖片。如果是企業(yè)網(wǎng)站,橫幅圖片可以是企業(yè)的成功案例,也可以是企業(yè)的優(yōu)勢(shì)產(chǎn)品。橫幅圖片的設(shè)計(jì)必須高檔、大氣、高端,圖片內(nèi)容應(yīng)與網(wǎng)站內(nèi)容一致,體現(xiàn)企業(yè)網(wǎng)站的專業(yè)性,影響企業(yè)形象。
第三,登錄頁(yè)面應(yīng)重點(diǎn)介紹產(chǎn)品。企業(yè)肯定會(huì)有很多產(chǎn)品,而且這些產(chǎn)品的類型肯定是不同的。因此,登錄頁(yè)面的建設(shè)必須對(duì)這些產(chǎn)品進(jìn)行詳細(xì)介紹,并做好分類介紹,以便用戶在點(diǎn)擊想要了解的產(chǎn)品后可以輕松進(jìn)入詳細(xì)介紹頁(yè)面,這也是登錄頁(yè)面的導(dǎo)航功能。
第四,登陸頁(yè)面應(yīng)顯示企業(yè)榮譽(yù)證書。企業(yè)網(wǎng)站是企業(yè)展示實(shí)力的最佳平臺(tái),而登錄頁(yè)面是最重要的環(huán)節(jié)。許多用戶通過(guò)登錄頁(yè)面了解網(wǎng)站。如果登錄頁(yè)面能夠證明企業(yè)的實(shí)力和優(yōu)勢(shì),用戶將留在網(wǎng)站上進(jìn)行深入訪問(wèn)。榮譽(yù)證書和一些相關(guān)部門的認(rèn)證是最好的解釋。
第五,登錄頁(yè)面應(yīng)顯示企業(yè)的聯(lián)系信息。特別是一些交互式聯(lián)系信息,如在線客服系統(tǒng),可以增強(qiáng)與用戶的互動(dòng),增強(qiáng)用戶的信任。在解決用戶問(wèn)題的同時(shí),引導(dǎo)用戶對(duì)網(wǎng)站進(jìn)行深度訪問(wèn),提高網(wǎng)站的粘性。
網(wǎng)站的登錄頁(yè)面對(duì)用戶很有吸引力,可以提高網(wǎng)站的轉(zhuǎn)化率。因此,登錄頁(yè)面的設(shè)計(jì)在網(wǎng)站建設(shè)中起著非常重要的作用。
本文由妥妥網(wǎng)站建設(shè)原創(chuàng),點(diǎn)贊關(guān)注,帶你一起長(zhǎng)知識(shí)!
了解更多
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。