999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Spring Security中設(shè)計(jì)模式的運(yùn)用淺析

2023-10-14 05:20:56覃蘢偉蘭全祥
大眾科技 2023年9期
關(guān)鍵詞:用戶策略方法

覃蘢偉 蘭全祥 

Spring Security中設(shè)計(jì)模式的運(yùn)用淺析

覃蘢偉 蘭全祥

(攀枝花學(xué)院,四川 攀枝花 617000)

Spring Security作為Web開發(fā)中十分重要的安全框架之一,常被用于Web應(yīng)用的認(rèn)證和授權(quán)。為了進(jìn)一步了解Spring Security框架的設(shè)計(jì)和實(shí)現(xiàn),加深對(duì)常見(jiàn)設(shè)計(jì)模式的理解,文章詳細(xì)介紹了Spring Security框架中策略模式、代理模式、適配器模式、責(zé)任鏈模式、模板方法模式的運(yùn)用,對(duì)上述設(shè)計(jì)模式的概念、基本原理、作用等進(jìn)行描述,分析Spring Security中關(guān)鍵類庫(kù)在設(shè)計(jì)模式中承擔(dān)的作用及執(zhí)行流程,為開發(fā)人員提供一定的學(xué)習(xí)參考。

Spring Security;設(shè)計(jì)模式;認(rèn)證;授權(quán)

引言

在Web應(yīng)用開發(fā)過(guò)程中,系統(tǒng)安全性和數(shù)據(jù)安全性是開發(fā)人員必須要考慮的,而Spring Security就是一個(gè)為企業(yè)應(yīng)用系統(tǒng)提供訪問(wèn)控制的安全框架。該框架的目的是在系統(tǒng)開發(fā)中減少編寫大量重復(fù)的安全控制方面的代碼,提高程序開發(fā)效率[1]。

在程序開發(fā)過(guò)程中,經(jīng)過(guò)長(zhǎng)時(shí)間的實(shí)踐,開發(fā)人員總結(jié)出了面臨一般問(wèn)題的解決方案,即設(shè)計(jì)模式。研究Spring Security框架中的設(shè)計(jì)模式,不僅能夠進(jìn)一步了解設(shè)計(jì)模式在開發(fā)中的運(yùn)用,還能深入了解Spring Security框架的安全認(rèn)證機(jī)制,能夠?yàn)榭蚣芎驮O(shè)計(jì)模式的學(xué)習(xí)者提供新的學(xué)習(xí)思路和學(xué)習(xí)參考。針對(duì)Spring Security框架的主要作用以及常用的設(shè)計(jì)模式,本文主要討論Spring Security框架中的策略模式、代理模式、適配器模式、責(zé)任鏈模式和模板方法模式的運(yùn)用。

1 Spring Security的概述

Spring Security作為應(yīng)用程序開發(fā)中常用的安全框架,其最大的優(yōu)勢(shì)是能夠便捷、高效地完成認(rèn)證和授權(quán),且該框架能夠?yàn)殚_發(fā)者提供一個(gè)高度自定義的開發(fā)環(huán)境,開發(fā)者可以根據(jù)不同需求靈活、便捷地進(jìn)行配置。

1.1 認(rèn)證功能

Spring Security中的認(rèn)證是由AuthenticationManager接口來(lái)負(fù)責(zé)的,該接口的核心方法是Authentication authenticate (Authentication authentication)throws AuthenticationException,當(dāng)正常返回 Authentication 時(shí),表示認(rèn)證成功;當(dāng)拋出異常時(shí),則表示認(rèn)證失敗。

該接口的主要實(shí)現(xiàn)類為 ProviderManager,在該實(shí)現(xiàn)類中管理了眾多AuthenticationProvider實(shí)例。在一次完整的認(rèn)證流程中,Spring Security允許存在多個(gè)AuthenticationProvider用來(lái)實(shí)現(xiàn)多種不同的認(rèn)證方式,且都由 ProviderManager 進(jìn)行統(tǒng)一管理,認(rèn)證信息將被Authentication 的實(shí)現(xiàn)類進(jìn)行保存,且用戶信息將被Spring Security的SecurityContextHolder對(duì)象進(jìn)行保存。

1.2 授權(quán)功能

在 Spring Security 的授權(quán)體系中,有兩個(gè)關(guān)鍵接口分別是AccessDecisionManager和AccessDecisionVoter。

當(dāng)用戶請(qǐng)求一個(gè)資源(通常是一個(gè)接口或者方法)時(shí),用戶的角色信息會(huì)被封裝成一個(gè)ConfigAttribute 對(duì)象。使用ConfigAttribute對(duì)象的getAttribute()方法可以獲得一個(gè)帶有“ROLE_”前綴的用戶角色信息。AccessDecisionVoter會(huì)根據(jù)用戶角色信息和所請(qǐng)求資源的 ConfigAttribute進(jìn)行比較,進(jìn)而投出贊成、反對(duì)或者棄權(quán)票。AccessDecisionManager作為訪問(wèn)決策管理器,最終將決定用戶的此次訪問(wèn)是否被允許。

1.3 核心原理

Spring Security的核心原理是將若干個(gè)過(guò)濾器組成過(guò)濾器鏈,然后所有的Servlet請(qǐng)求經(jīng)過(guò)這些過(guò)濾器進(jìn)行認(rèn)證、授權(quán)等,從而保障程序的安全性。主要過(guò)濾器包括Username Password Authentication Filter過(guò)濾器(處理表單認(rèn)證信息)、Basic Authentication Filter過(guò)濾器(檢測(cè)和處理http basic認(rèn)證)、Other Security Filter過(guò)濾器、Exception Translation Filter過(guò)濾器(處理Access Denied Exception和Authentication Exception異常)和Filter Security Interceptor過(guò)濾器(授權(quán)并決定是否可以訪問(wèn)資源服務(wù))等[2],Spring Security主要過(guò)濾器如圖1所示。

圖1 Spring Security主要過(guò)濾器

2 Spring Security的設(shè)計(jì)模式

Spring Security框架運(yùn)用了諸多設(shè)計(jì)模式,包括策略模式、代理模式、適配器模式、模板方法模式、責(zé)任鏈模式、建造者模式、觀察者模式、裝飾器模式等。本文將重點(diǎn)介紹策略模式、代理模式、適配器模式、責(zé)任鏈模式和模板方法模式在Spring Security中的運(yùn)用。

2.1 策略模式

2.1.1 策略模式介紹

策略模式是一種行為型模式,它將對(duì)象和行為分開,將行為定義為一個(gè)接口,并將其作為抽象策略類(Strategy)。每一個(gè)不同的具體行為需要實(shí)現(xiàn)抽象策略類,并將其作為具體策略類(ConcreteStrategy),即不同的策略。除此之外,再由上下文類(Context)根據(jù)需求對(duì)不同的策略進(jìn)行選擇和替換[3]。

策略模式關(guān)注的是行為的選擇,即可以在不同的行為之間進(jìn)行替換。例如,在一個(gè)業(yè)務(wù)處理流程中有許多種方式可以完成該業(yè)務(wù),這些方式之間的區(qū)別僅在于解決方式不同,即不同的行為,可以使用策略模式讓上下文類(Context)動(dòng)態(tài)地選擇一種方式進(jìn)行執(zhí)行。

2.1.2 在Spring Security中的運(yùn)用

一般情況下,當(dāng)用戶登錄成功后,系統(tǒng)會(huì)保存用戶登錄信息。從信息安全的角度出發(fā),為了確保用戶信息只有當(dāng)前線程能夠訪問(wèn),通常會(huì)將當(dāng)前用戶信息和當(dāng)前線程進(jìn)行綁定,即將用戶信息存儲(chǔ)在當(dāng)前線程中。但是系統(tǒng)中難免會(huì)出現(xiàn)多線程的業(yè)務(wù),或是在某個(gè)具體的業(yè)務(wù)邏輯處理中需要開啟子線程,此時(shí)就需要每個(gè)子線程都能夠訪問(wèn)用戶信息。這時(shí),就出現(xiàn)了不同的用戶信息存儲(chǔ)策略,需要開發(fā)人員根據(jù)不同的需求選擇存儲(chǔ)策略。

Spring Security在解決用戶信息存儲(chǔ)的問(wèn)題上采用了策略模式。該框架定義了SecurityContextHolderStrategy接口作為抽象策略類,并實(shí)現(xiàn)了三種不同的具體存放策略以及作為上下文類的SecurityContextHolder,如圖2所示。

圖2 Spring Security中策略模式示意圖

Spring Security在SecurityContextHolder中定義了三個(gè)靜態(tài)常量,分別是MODE_THREADLOCAL、MODE_INHERITABLETHREADLOCAL、MODE_GLOBAL,并讓其與某一具體存放策略進(jìn)行對(duì)應(yīng),開發(fā)人員在開發(fā)過(guò)程中只需根據(jù)具體需求去選擇存放策略。

以MODE_THREADLOCAL所對(duì)應(yīng)的存儲(chǔ)策略為例,程序在啟動(dòng)過(guò)程中會(huì)先加載寫有該策略信息的配置文件,然后再運(yùn)行過(guò)程中根據(jù)所選策略來(lái)執(zhí)行ThreadLocalSecurityContextHolderStrategy中的具體實(shí)現(xiàn),該策略會(huì)通過(guò)ThreadLocal保存用戶信息。由于使用 ThreadLocal 創(chuàng)建的變量只能被當(dāng)前線程訪問(wèn),不能被其他線程訪問(wèn)和修改,從而確保了用戶信息安全。

2.2 代理模式

2.2.1 代理模式介紹

代理模式是一種對(duì)象結(jié)構(gòu)型模式,它給某一個(gè)真實(shí)對(duì)象(委托類)提供一個(gè)代理對(duì)象(代理類)。為了確保代理類能夠?qū)崿F(xiàn)對(duì)委托類的代理,一般情況下需要兩個(gè)類共同實(shí)現(xiàn)公共接口,并由代理對(duì)象控制對(duì)真實(shí)對(duì)象的引用,從而控制對(duì)象的訪問(wèn)[4]。

代理類能夠?qū)ξ蓄愡M(jìn)行功能增強(qiáng)(包括功能的預(yù)處理和后置處理),由于代理類對(duì)象本身并不真正實(shí)現(xiàn)服務(wù),因此代理類對(duì)象需要與對(duì)應(yīng)的委托類對(duì)象進(jìn)行關(guān)聯(lián),當(dāng)需要提供服務(wù)時(shí),由代理類對(duì)象調(diào)用所關(guān)聯(lián)的委托類對(duì)象的相關(guān)方法來(lái)提供服務(wù)。代理模式就是在訪問(wèn)委托類對(duì)象時(shí)增加了一定程度的間接性,這樣在程序開發(fā)過(guò)程中,可以附加多種其他操作,如Spring Security框架中對(duì)密碼進(jìn)行加密、加密方法的判斷和選擇等。

2.2.2 在Spring Security中的運(yùn)用

為了保證用戶密碼安全,系統(tǒng)通常不會(huì)將用戶密碼以明文的方式存放在數(shù)據(jù)庫(kù)中,而是采用合適的加密方案對(duì)密碼進(jìn)行加密后再進(jìn)行存儲(chǔ)。Spring Security中定義一個(gè)PasswordEncoder接口,并提供了多個(gè)實(shí)現(xiàn)類來(lái)對(duì)應(yīng)不同的加密方案,方便開發(fā)者對(duì)密碼進(jìn)行加密,如圖3所示。

圖3 PasswordEncoder的接口及實(shí)現(xiàn)類

但是在系統(tǒng)運(yùn)行過(guò)程中,如果長(zhǎng)期使用單一的密碼加密方案可能會(huì)降低系統(tǒng)安全性,因此在開發(fā)過(guò)程中往往會(huì)在上述加密方案中進(jìn)行隨機(jī)選擇,讓數(shù)據(jù)庫(kù)中存放不同加密方案所加密的密文,以保障用戶信息的安全。由于用戶登錄時(shí)需要進(jìn)行密碼比對(duì),且登錄和注冊(cè)時(shí)需要使用相同的PasswordEncoder接口實(shí)現(xiàn)類,因此多種加密方案會(huì)對(duì)登錄校驗(yàn)造成困難,即在登錄校驗(yàn)時(shí)需要先判斷加密方案,然后再調(diào)用對(duì)應(yīng)加密方案的PasswordEncoder實(shí)現(xiàn)類去進(jìn)行密碼比對(duì)。

為了解決上述問(wèn)題,Spring Security采用代理模式對(duì)需要進(jìn)行比對(duì)的密碼進(jìn)行預(yù)處理,即判斷用戶密碼使用的加密方案,再進(jìn)行匹配。以BCryptPasswordEncoder加密方案為例,Spring Security定義了一個(gè)代理類DelegatingePasswordEncoder,該代理類實(shí)現(xiàn)了PasswordEncoder接口,然后在類中調(diào)用了委托類BCryptPasswordEncoder的matches方法,如圖4所示。

圖4 DelegatingePasswordEncode代理示意圖

具體代理流程:在委托類BCryptPasswordEncoder的matches方法中先對(duì)參數(shù)中的密文進(jìn)行解析,從而判斷出密碼的加密方案id。然后,根據(jù)加密方案id生成對(duì)應(yīng)的加密方案對(duì)象(PasswordEncoder實(shí)現(xiàn)類對(duì)象),再通過(guò)調(diào)用該對(duì)象的matches方法完成密碼比對(duì)。核心代碼如下:

public boolean matches(CharSequence rawPassword, String prefixEncodedPassword) {

if (rawPassword == null && prefixEncodedPassword == null) { return true; } else {

String id = this.extractId(prefixEncodedPassword);

PasswordEncoder delegate = (PasswordEncoder)this. idToPasswordEncoder.get(id);

if (delegate == null) {

return this.defaultPasswordEncoderForMatches.matches(rawPassword, prefixEncodedPassword);

} else {

String encodedPassword = this.extractEncodedPassword (prefixEncodedPassword);

return delegate.matches(rawPassword, encodedPassword);}}}

若系統(tǒng)中存在多種不同的密碼加密方案,采用代理模式可以在進(jìn)行密碼對(duì)比時(shí)對(duì)相應(yīng)方法進(jìn)行增強(qiáng),提前對(duì)密文和加密方案進(jìn)行判斷,提高開發(fā)效率。Spring Security將對(duì)PasswordEncoder各個(gè)實(shí)現(xiàn)類的訪問(wèn)操作交給代理對(duì)象DelegatingePasswordEncoder進(jìn)行,實(shí)現(xiàn)對(duì)不同加密方案的統(tǒng)一管理。

此外,Spring Security框架使用DelegatingFilterProxy將過(guò)濾器鏈鏈接到Web Filter中也是典型的代理模式。

2.3 適配器模式

2.3.1 適配器模式介紹

適配器模式屬于結(jié)構(gòu)型模式,一般用作兩個(gè)不兼容接口之間的橋梁。適配器模式主要包含Target(目標(biāo)抽象類,包含用戶所期望的接口)、Adaptee(被適配類,即被適配的角色)以及Adapter(適配器類)三個(gè)角色。雖然Adaptee中已經(jīng)存在滿足客戶需求的內(nèi)容,但是由于接口不匹配,因此需要通過(guò)Adapter對(duì)接口進(jìn)行轉(zhuǎn)換,即通過(guò)Adapter使Adaptee和Target進(jìn)行適配。

適配器模式的原理是讓Adapter實(shí)現(xiàn)目標(biāo)抽象類Target并關(guān)聯(lián)一個(gè)被適配類Adaptee對(duì)象,使得后二者產(chǎn)生聯(lián)系。由于Adapter結(jié)合了兩個(gè)接口的功能,因此該模式能夠?qū)⒁粋€(gè)接口轉(zhuǎn)換成客戶希望的另一個(gè)接口,使接口不兼容的那些類可以一起工作[5]。

2.3.2 在Spring Security中的運(yùn)用

在Spring Security中SecurityConfigurer是一個(gè)非常重要的角色,SecurityConfigurer主要用來(lái)對(duì)Spring Security中的過(guò)濾器進(jìn)行配置,從而實(shí)現(xiàn)對(duì)所有請(qǐng)求的控制。SecurityConfigurer具有一個(gè)重要的實(shí)現(xiàn)類WebSecurityConfigurer,該類目的是配置WebSecurity。然而,為了實(shí)現(xiàn)對(duì)WebSecurity的配置和初始化,需要使用HttpSecurity類的方法,即WebSecurityConfigurer這個(gè)目標(biāo)抽象類需要使用HttpSecurity中的內(nèi)容,但由于兩者之間不能直接進(jìn)行交互,因此引入了WebSecurityConfigerAdapter作為適配器,以使兩者能夠在一起工作。

Spring Security采用適配器模式,定義了一個(gè)WebSecurityConfigerAdapter適配器(適配器類),該類繼承WebSecurityConfigurer(目標(biāo)抽象類)并與HttpSecurity(適配者類)進(jìn)行關(guān)聯(lián),三者關(guān)系如圖5所示。

圖5 Spring Security中適配器模式關(guān)系示意圖

在WebSecurityConfigerAdapter中能夠?qū)ttpSecurity類的示例進(jìn)行初始化,同時(shí)實(shí)現(xiàn)對(duì)WebSecurity的配置,進(jìn)而完成WebSecurityConfiger所需業(yè)務(wù)需求,關(guān)鍵代碼如下。

public abstract class WebSecurityConfigurerAdapter implements WebSecurityConfigurer {

/*省略其他成員變量*/

private HttpSecurity http;

protected final HttpSecurity getHttp() throws Exception {}//實(shí)現(xiàn)對(duì)HttpSecurity的初始化

public void init(WebSecurity web) throws Exception {

HttpSecurity http = this.getHttp();

//使用http完成WebSecurityConfiger所需業(yè)務(wù)

}

2.4 責(zé)任鏈模式

2.4.1 責(zé)任鏈模式介紹

責(zé)任鏈模式屬于行為型模式,它將命令的發(fā)出者和執(zhí)行者解耦。命令的發(fā)出者將命令發(fā)出后,命令到達(dá)責(zé)任鏈,并沿著責(zé)任鏈在不同的執(zhí)行者之間傳遞,最后由適當(dāng)?shù)膱?zhí)行者進(jìn)行處理。發(fā)出者無(wú)需關(guān)心命令由哪一個(gè)執(zhí)行者處理以及處理細(xì)節(jié),只需將命令發(fā)送到責(zé)任鏈上,實(shí)現(xiàn)將命令發(fā)出者和執(zhí)行者進(jìn)行分離,從而降低了他們之間的耦合度。

當(dāng)有多個(gè)執(zhí)行者可以處理同一個(gè)命令且無(wú)法確定最終會(huì)由哪一個(gè)或多個(gè)執(zhí)行者來(lái)進(jìn)行處理時(shí),在責(zé)任鏈模式中,這些執(zhí)行者將實(shí)現(xiàn)一個(gè)公共的Handler接口,并在該接口中定義了處理命令的方法和調(diào)用下一個(gè)處理者的方法。

2.4.2 在Spring Security中的運(yùn)用

在Spring Security中使用了諸多的過(guò)濾器來(lái)對(duì)請(qǐng)求進(jìn)行處理,這些過(guò)濾器都實(shí)現(xiàn)了一個(gè)公共的接口Filter,并在不同的實(shí)現(xiàn)類中重寫doFilter方法進(jìn)行不同功能的實(shí)現(xiàn),如圖6所示。

在進(jìn)行用戶登錄認(rèn)證時(shí),使用UsernamePasswordAuthenticationFilter 過(guò)濾器對(duì)表單攜帶的登錄信息進(jìn)行處理;在防止CSRF(Cross Site Request Forgery,跨域請(qǐng)求偽造)時(shí),使用CsrfFilter過(guò)濾器對(duì)所有post請(qǐng)求進(jìn)行驗(yàn)證;當(dāng)系統(tǒng)沒(méi)有在配置文件中指定登錄頁(yè)面時(shí),DefaultLoginPageGeneratingFilter過(guò)濾器會(huì)為系統(tǒng)生成一個(gè)默認(rèn)的登錄界面。但當(dāng)一個(gè)請(qǐng)求到達(dá)前,系統(tǒng)并不能提前預(yù)知應(yīng)該使用哪一個(gè)過(guò)濾器對(duì)請(qǐng)求進(jìn)行處理,因此Spring Security引入了過(guò)濾器鏈來(lái)解決這一問(wèn)題。

圖6 Spring Security中Filter接口實(shí)現(xiàn)示意圖

Spring Security采用責(zé)任鏈模式,定義了一個(gè)VirtualFilterChain 類,在其中聲明了 5 個(gè)全局屬性:originalChain 表示原生過(guò)濾器鏈(即Web Filter),additionalFilters 表示 Spring Security 中的過(guò)濾器鏈(存儲(chǔ)Filter的list集合);firewalledRequest 表示當(dāng)前請(qǐng)求;size 表示過(guò)濾器鏈中過(guò)濾器的個(gè)數(shù);currentPosition 則是遍歷過(guò)濾器鏈時(shí)的下標(biāo)。

當(dāng)currentPosition等于size時(shí),表示過(guò)濾器鏈已經(jīng)執(zhí)行完畢,此時(shí)會(huì)退出 Spring Security 過(guò)濾器鏈,并通過(guò)調(diào)用 originalChain.doFilter 進(jìn)入到原生過(guò)濾鏈方法中。反之,則依次從 additionalFilters 中取出過(guò)濾器nextFilter并調(diào)用其doFilter 方法。相關(guān)代碼如下:

public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException {

if (this.currentPosition == this.size) {

this.originalChain.doFilter(request, response);

} else {

++this.currentPosition;

Filter nextFilter = (Filter)this.additionalFilters.get (this.currentPosition - 1);

nextFilter.doFilter(request, response, this);

}}

Spring Security中運(yùn)用責(zé)任鏈模式,保障過(guò)濾器鏈中的每個(gè)過(guò)濾器都具有不同的職能并且互不相擾,使得每個(gè)過(guò)濾器都能獨(dú)立、逐個(gè)處理Servlet請(qǐng)求。

2.5 模板方法模式

2.5.1 模板方法模式介紹

模板方法模式是一種行為型模式,將一個(gè)業(yè)務(wù)邏輯中的方法骨架作為一個(gè)模板方法,并將某些方法的具體實(shí)現(xiàn)延遲到子類中完成,使子類可以在不改變?cè)摌I(yè)務(wù)邏輯執(zhí)行順序的情況下更改某些方法的實(shí)現(xiàn)。

模板方法模式中的主要角色有抽象類(Abstract Class),該類負(fù)責(zé)給出算法的輪廓和骨架。抽象類由一個(gè)模板方法和若干基礎(chǔ)方法構(gòu)成,其中模板方法就是算法的骨架,并按照某種順序去調(diào)用基礎(chǔ)方法。當(dāng)存在多個(gè)業(yè)務(wù)具有相同邏輯,且業(yè)務(wù)處理順序基本一致時(shí),可以考慮模板方法模式。

2.5.2 在Spring Security中的運(yùn)用

在Spring Security中諸多功能都是基于過(guò)濾器鏈實(shí)現(xiàn)的,且這些過(guò)濾器鏈都是通過(guò)建造者類來(lái)進(jìn)行配置并創(chuàng)建的,工作流程都十分固定,主要包括初始化(init)、配置(config)、構(gòu)建(performBuild)。但由于這些過(guò)濾器鏈的方法內(nèi)部的實(shí)現(xiàn)都不盡相同,因此Spring Security通過(guò)模板方法來(lái)解決這一問(wèn)題。

Spring Security采用模板方法模式定義了一個(gè)AbstractConfiguredSecurityBuilder作為所有過(guò)濾器鏈建造者類的父類,并在父類中規(guī)定了工作流程doBuild()方法(即方法調(diào)用順序),并使用final修飾該方法,使得子類無(wú)法改變,從而讓所有的過(guò)濾器鏈都按照前置初始化(beforeInit)、初始化(init)、前置配置(beforeConfigure)、配置(Configure)、構(gòu)建(performBuild)的順序執(zhí)行建造者類中的方法。然后,這些過(guò)濾器鏈可以根據(jù)實(shí)際需求重寫performBuild()方法,關(guān)鍵代碼如下。

protected final O doBuild() throws Exception {

this.beforeInit();

this.init();

this.beforeConfigure();

this.configure();

O result = this.performBuild();

return result;

}

private void init() throws Exception { }

private void configure() throws Exception {}

protected abstract O performBuild() throws Exception{}

Spring Security中采用模板方法模式,將創(chuàng)建過(guò)濾器鏈的工作流程交由父類控制,而行為的實(shí)現(xiàn)(performBuild()方法)延遲到子類當(dāng)中,使得不同子類可以完成不同的實(shí)現(xiàn)。

3 結(jié)束語(yǔ)

設(shè)計(jì)模式的意義就是為程序開發(fā)提供解決方案,優(yōu)化代碼邏輯,使程序更易于維護(hù)、擴(kuò)展和服用。以Spring Security框架為例,理解框架中所運(yùn)用到的策略模式、代理模式、適配器模式、責(zé)任鏈模式、模板方法模式等設(shè)計(jì)模式,不僅能夠從主流框架中學(xué)習(xí)到程序設(shè)計(jì)和開發(fā)思想,關(guān)注信息系統(tǒng)安全性,考慮工程實(shí)踐對(duì)于社會(huì)的影響,還能夠進(jìn)一步了解設(shè)計(jì)模式的優(yōu)缺點(diǎn)及使用場(chǎng)景。理解、掌握設(shè)計(jì)模式原理,并能夠在合適的場(chǎng)景中使用設(shè)計(jì)模式是提高開發(fā)效率,增強(qiáng)代碼可維護(hù)性的主要途經(jīng)之一。

[1] 孫恩斯. Spring Security安全框架應(yīng)用研究[J]. 信息系統(tǒng)工程,2019(3): 72.

[2] 朱運(yùn)喬. 基于Spring Security認(rèn)證與授權(quán)的Web應(yīng)用與實(shí)現(xiàn)[J]. 電腦編程技巧與維護(hù),2020(11): 14-16.

[3] 許俊. 基于策略模式的存儲(chǔ)過(guò)程使用研究[J]. 四川職業(yè)技術(shù)學(xué)院學(xué)報(bào),2017,27(5): 147-150.

[4] 盧增寧. 設(shè)計(jì)模式及其在軟件設(shè)計(jì)中的應(yīng)用[J]. 信息與電腦(理論版),2020,32(16): 127-129.

[5] 高升,方英蘭,韓兵,等. 適配器與裝飾者模式思想在結(jié)構(gòu)化數(shù)據(jù)處理中的應(yīng)用[J]. 北方工業(yè)大學(xué)學(xué)報(bào),2020,32(2): 105-109,116.

Analysis of the Application of Design Patterns in Spring Security

As one of the most important security frameworks for Web development, Spring Security is often used for authentication and authorization of Web applications. In order to further understand the design and implementation of the Spring Security framework and deepen the understanding of common design patterns, this paper introduces the application of policy pattern, proxy pattern, adapter pattern, responsibility chain pattern and template method pattern in Spring Security framework in detail. This paper describes the concept, basic principle and function of the above design pattern, analyzes the role of key class libraries in Spring Security in the design pattern and the execution process, and provides certain reference for developers.

Spring Security; design patterns; authentication; authorization

TP393.08

A

1008-1151(2023)09-0001-05

2022-11-25

四川省高等學(xué)校第四批省級(jí)創(chuàng)新創(chuàng)業(yè)教育示范課程建設(shè)項(xiàng)目“Java Web應(yīng)用開發(fā)實(shí)訓(xùn)”;2022年全國(guó)大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目(202211360019);2022年校級(jí)大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目(2022cxcy147)。

覃蘢偉(2002-),男,四川自貢人,攀枝花學(xué)院學(xué)生,研究方向?yàn)檐浖_發(fā)。

蘭全祥(1990-),男,四川攀枝花人,攀枝花學(xué)院講師,碩士,從事計(jì)算機(jī)應(yīng)用研究工作。

猜你喜歡
用戶策略方法
例談未知角三角函數(shù)值的求解策略
我說(shuō)你做講策略
高中數(shù)學(xué)復(fù)習(xí)的具體策略
關(guān)注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關(guān)注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關(guān)注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
用對(duì)方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
捕魚
如何獲取一億海外用戶
主站蜘蛛池模板: 亚洲第一视频免费在线| 国产精品一线天| 人人91人人澡人人妻人人爽| 亚洲无码视频喷水| 亚洲a免费| 亚洲色图欧美在线| 国产毛片久久国产| 亚洲成人黄色在线| 亚洲日本www| 久久 午夜福利 张柏芝| 老司机精品久久| 亚洲首页在线观看| 亚洲人成影院在线观看| 性视频久久| 国产精品一区在线麻豆| 国产在线日本| 最新亚洲人成无码网站欣赏网 | 国产成人AV大片大片在线播放 | 性色一区| 国产精品福利一区二区久久| 国产不卡网| 一区二区午夜| 欧美三級片黃色三級片黃色1| 午夜激情婷婷| 99热在线只有精品| 首页亚洲国产丝袜长腿综合| 免费看av在线网站网址| 久久久久久久久18禁秘| 久久一日本道色综合久久| 国内精品一区二区在线观看 | 美女扒开下面流白浆在线试听| 精品91在线| 自偷自拍三级全三级视频 | 成年人国产网站| 人妻无码一区二区视频| 亚洲无限乱码| 日本在线欧美在线| 国产无吗一区二区三区在线欢| 99在线视频免费| 国产一级二级三级毛片| 一级香蕉人体视频| 91无码网站| 国产女人18水真多毛片18精品 | 欧美色图第一页| 一本大道在线一本久道| 无码国内精品人妻少妇蜜桃视频 | 成人免费视频一区| 免费A∨中文乱码专区| 久久久无码人妻精品无码| 中文字幕在线永久在线视频2020| 啪啪免费视频一区二区| 在线一级毛片| 99福利视频导航| 日韩区欧美国产区在线观看| 亚洲成A人V欧美综合天堂| 久久综合丝袜日本网| 综合色婷婷| 亚洲中文无码av永久伊人| 日韩精品亚洲人旧成在线| 久久亚洲高清国产| 综合亚洲网| 91热爆在线| 日本三级黄在线观看| 人人艹人人爽| 毛片a级毛片免费观看免下载| 99久久国产综合精品女同| 中文字幕 91| 亚洲天堂视频网| 国产精品美女免费视频大全| 午夜精品区| 久久窝窝国产精品午夜看片| 国产成人精品在线| 天堂中文在线资源| 国产亚洲欧美另类一区二区| 久久综合九色综合97网| 久久国产乱子| 国产精品毛片一区| 无码视频国产精品一区二区| 国产欧美精品一区aⅴ影院| 青青久视频| 欧美三级日韩三级| 精品国产成人av免费|