spring boot
spring security
@RestController
public class HelloController {@RequestMapping("/hello")
public String Hello(){System.out.println("spring security");
return "hello spring security";
}
}
3.啟動(dòng)項(xiàng)目進(jìn)行測(cè)試整合Spring Security
1.引入spring security依賴org.springframework.boot spring-boot-starter-security
2.再次啟動(dòng)項(xiàng)目這就是Spring Security 的強(qiáng)大之處,只需要引入一個(gè)依賴,所有的接口就會(huì)自動(dòng)保護(hù)起來!
思考?
在 Spring Security 中認(rèn)證、授權(quán)
等功能都是基于過濾器完成的。
需要注意的是,默認(rèn)過濾器并不是直接放在 Web 項(xiàng)目的原生過濾器鏈中,而是通過一FilterChainProxy 來統(tǒng)一管理。Spring Security 中的過濾器鏈通過 FilterChainProxy 嵌入到 Web項(xiàng)目的原生過濾器鏈中。FilterChainProxy 作為一個(gè)頂層的管理者,將統(tǒng)一管理 Security Filter。FilterChainProxy 本身是通過 Spring 框架提供的 DelegatingFilterProxy 整合到原生的過濾器鏈中。
Security Filters
過濾器 | 過濾器作用 | 默認(rèn)是否加載 |
---|---|---|
ChannelProcessingFilter | 過濾請(qǐng)求協(xié)議 HTTP 、HTTPS | NO |
WebAsyncManagerIntegrationFilter | 將 WebAsyncManger 與 SpringSecurity 上下文進(jìn)行集成 | YES |
SecurityContextPersistenceFilter | 在處理請(qǐng)求之前,將安全信息加載到 SecurityContextHolder 中 | YES |
HeaderWriterFilter | 處理頭信息加入響應(yīng)中 | YES |
CorsFilter | 處理跨域問題 | NO |
CsrfFilter | 處理 CSRF 攻擊 | YES |
LogoutFilter | 處理注銷登錄 | YES |
OAuth2AuthorizationRequestRedirectFilter | 處理 OAuth2 認(rèn)證重定向 | NO |
Saml2WebSsoAuthenticationRequestFilter | 處理 SAML 認(rèn)證 | NO |
X509AuthenticationFilter | 處理 X509 認(rèn)證 | NO |
AbstractPreAuthenticatedProcessingFilter | 處理預(yù)認(rèn)證問題 | NO |
CasAuthenticationFilter | 處理 CAS 單點(diǎn)登錄 | NO |
OAuth2LoginAuthenticationFilter | 處理 OAuth2 認(rèn)證 | NO |
Saml2WebSsoAuthenticationFilter | 處理 SAML 認(rèn)證 | NO |
UsernamePasswordAuthenticationFilter | 處理表單登錄 | YES |
OpenIDAuthenticationFilter | 處理 OpenID 認(rèn)證 | NO |
DefaultLoginPageGeneratingFilter | 配置默認(rèn)登錄頁(yè)面 | YES |
DefaultLogoutPageGeneratingFilter | 配置默認(rèn)注銷頁(yè)面 | YES |
ConcurrentSessionFilter | 處理 Session 有效期 | NO |
DigestAuthenticationFilter | 處理 HTTP 摘要認(rèn)證 | NO |
BearerTokenAuthenticationFilter | 處理 OAuth2 認(rèn)證的 Access Token | NO |
BasicAuthenticationFilter | 處理 HttpBasic 登錄 | YES |
RequestCacheAwareFilter | 處理請(qǐng)求緩存 | YES |
SecurityContextHolder | 包裝原始請(qǐng)求 | YES |
JaasApiIntegrationFilter | 處理 JAAS 認(rèn)證 | NO |
RememberMeAuthenticationFilter | 處理 RememberMe 登錄 | NO |
AnonymousAuthenticationFilter | 配置匿名認(rèn)證 | YES |
OAuth2AuthorizationCodeGrantFilter | 處理OAuth2認(rèn)證中授權(quán)碼 | NO |
SessionManagementFilter | 處理 session 并發(fā)問題 | YES |
ExceptionTranslationFilter | 處理認(rèn)證/授權(quán)中的異常 | YES |
FilterSecurityInterceptor | 處理授權(quán)相關(guān) | YES |
SwitchUserFilter | 處理賬戶切換 | NO |
可以看出,Spring Security 提供了 30 多個(gè)過濾器。默認(rèn)情況下Spring Boot 在對(duì) Spring Security 進(jìn)入自動(dòng)化配置時(shí),會(huì)創(chuàng)建一個(gè)名為 SpringSecurityFilerChain 的過濾器,并注入到 Spring 容器中,這個(gè)過濾器將負(fù)責(zé)所有的安全管理,包括用戶認(rèn)證、授權(quán)、重定向到登錄頁(yè)面等。
SpringBootWebSecurityConfiguration
這個(gè)類是 spring boot 自動(dòng)配置類,通過這個(gè)源碼得知,默認(rèn)情況下對(duì)所有請(qǐng)求進(jìn)行權(quán)限控制:
@Configuration(proxyBeanMethods = false)
@ConditionalOnDefaultWebSecurity
@ConditionalOnWebApplication(type = Type.SERVLET)
class SpringBootWebSecurityConfiguration {@Bean
@Order(SecurityProperties.BASIC_AUTH_ORDER)
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http)
throws Exception { http.authorizeRequests().anyRequest()
.authenticated().and().formLogin().and().httpBasic();
return http.build();
}
}
這就是為什么在引入 Spring Security 中沒有任何配置情況下,請(qǐng)求會(huì)被攔截的原因
通過上面對(duì)自動(dòng)配置分析,我們也能看出默認(rèn)生效條件為:
默認(rèn)情況下,條件都是滿足的。WebSecurityConfigurerAdapter 這個(gè)類極其重要,Spring Security 核心配置都在這個(gè)類中:
如果要對(duì) Spring Security 進(jìn)行自定義配置,就要自定義這個(gè)類實(shí)例,通過覆蓋類中方法達(dá)到修改默認(rèn)配置的目的。
就是通過這種方式,Spring Security 默認(rèn)過濾器中生成了登錄頁(yè)面,并返回!
默認(rèn)用戶生成看到這里就知道默認(rèn)實(shí)現(xiàn)是基于 InMemoryUserDetailsManager 這個(gè)類,也就是內(nèi)存的實(shí)現(xiàn)!
UserDetailService通過剛才源碼分析也能得知 UserDetailService 是頂層父接口,接口中 loadUserByUserName 方法是用來在認(rèn)證時(shí)進(jìn)行用戶名認(rèn)證方法,默認(rèn)實(shí)現(xiàn)使用是內(nèi)存實(shí)現(xiàn),如果想要修改數(shù)據(jù)庫(kù)實(shí)現(xiàn)我們只需要自定義 UserDetailService 實(shí)現(xiàn),最終返回 UserDetails 實(shí)例即可。
public interface UserDetailsService {UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
}
總結(jié)你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁(yè)名稱:2.Springsecurity環(huán)境搭建、實(shí)現(xiàn)原理、流程分析-創(chuàng)新互聯(lián)
URL分享:http://www.rwnh.cn/article32/cspdpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、企業(yè)建站、軟件開發(fā)、虛擬主機(jī)、網(wǎng)站改版、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容