本篇內(nèi)容主要講解“為什么加了一個(gè)Spring Security依賴(lài)所有接口都無(wú)法訪(fǎng)問(wèn)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“為什么加了一個(gè)Spring Security依賴(lài)所有接口都無(wú)法訪(fǎng)問(wèn)”吧!
成都網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、重慶網(wǎng)站建設(shè)公司、微信開(kāi)發(fā)、微信平臺(tái)小程序開(kāi)發(fā)、集團(tuán)成都企業(yè)網(wǎng)站定制等服務(wù)項(xiàng)目。核心團(tuán)隊(duì)均擁有互聯(lián)網(wǎng)行業(yè)多年經(jīng)驗(yàn),服務(wù)眾多知名企業(yè)客戶(hù);涵蓋的客戶(hù)類(lèi)型包括:自拌料攪拌車(chē)等眾多領(lǐng)域,積累了大量豐富的經(jīng)驗(yàn),同時(shí)也獲得了客戶(hù)的一致稱(chēng)揚(yáng)!
當(dāng)我們?cè)陧?xiàng)目中添加了 Spring Security
依賴(lài)后, 即使不做任何配置, 它也默認(rèn)會(huì)幫我們攔截掉所有請(qǐng)求.
為了修改 Spring Security
的默認(rèn)行為, 我們需要做一些配置, 也就是通過(guò)重寫(xiě) WebSecurityConfigurerAdapter
的 configure(HttpSecurity http)
方法.
那么問(wèn)題來(lái)了, 為什么僅僅加了一個(gè) Spring Security
依賴(lài), 就可以攔截請(qǐng)求了?
答案自然跟 Springboot
的自動(dòng)裝配有關(guān)系.
通過(guò) @Import
注解, 可以找到 SpringBootWebSecurityConfiguration
類(lèi)
@Configuration(proxyBeanMethods = false) @ConditionalOnClass(DefaultAuthenticationEventPublisher.class) @EnableConfigurationProperties(SecurityProperties.class) @Import({ SpringBootWebSecurityConfiguration.class, WebSecurityEnablerConfiguration.class, SecurityDataConfiguration.class }) public class SecurityAutoConfiguration { @Bean @ConditionalOnMissingBean(AuthenticationEventPublisher.class) public DefaultAuthenticationEventPublisher authenticationEventPublisher(ApplicationEventPublisher publisher) { return new DefaultAuthenticationEventPublisher(publisher); } }
從 @ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class)
可以看出, 當(dāng)項(xiàng)目中沒(méi)有配置 WebSecurityConfigurerAdapter
時(shí), 這個(gè)配置類(lèi)才會(huì)生效.
當(dāng)這個(gè)配置類(lèi)生效后, 會(huì)幫我們配置一個(gè)默認(rèn)的 WebSecurityConfigurerAdapter
由前面可知, 通過(guò)配置 WebSecurityConfigurerAdapter
可以實(shí)現(xiàn)定義攔截方式.
@Configuration(proxyBeanMethods = false) @ConditionalOnClass(WebSecurityConfigurerAdapter.class) @ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class) @ConditionalOnWebApplication(type = Type.SERVLET) public class SpringBootWebSecurityConfiguration { @Configuration(proxyBeanMethods = false) @Order(SecurityProperties.BASIC_AUTH_ORDER) static class DefaultConfigurerAdapter extends WebSecurityConfigurerAdapter { } }
從下面的默認(rèn)配置可以得知, 默認(rèn)的配置是所有的請(qǐng)求都需要登錄認(rèn)證.
protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() // 重點(diǎn) .anyRequest().authenticated() .and() .formLogin().and() .httpBasic(); }
當(dāng)我們的 Springboot
工程引入 Spring Security
依賴(lài)后, 項(xiàng)目中的 “安全機(jī)制” 就已經(jīng)開(kāi)啟了.
因?yàn)楦鶕?jù) Spring boot
的自動(dòng)裝配原理, 在加載 SecurityAutoConfiguration
配置類(lèi)時(shí), 會(huì)再加載 SpringBootWebSecurityConfiguration
配置類(lèi).
而在 SpringBootWebSecurityConfiguration
類(lèi)中, 默認(rèn)幫我們初始化了一個(gè)WebSecurityConfigurerAdapter
類(lèi).
WebSecurityConfigurerAdapter
的有一個(gè)作用就是 配置訪(fǎng)問(wèn)請(qǐng)求需要的權(quán)限.
如果不覆蓋此類(lèi)的 configure(HttpSecurity http)
方法, 它的默認(rèn)行為就是 要求對(duì)所有的請(qǐng)求進(jìn)行登錄認(rèn)證.
到此,相信大家對(duì)“為什么加了一個(gè)Spring Security依賴(lài)所有接口都無(wú)法訪(fǎng)問(wèn)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!