簡(jiǎn)單談?wù)勂渲械囊c(diǎn)
1、基于Filter技術(shù)實(shí)現(xiàn)?
首先SpringSecurity是基于Filter技術(shù)實(shí)現(xiàn)的。Spring通過DelegatingFilterProxy建立Web容器和Spring ApplicationContext的聯(lián)系,而SpringSecurity使用FilterChainProxy 注冊(cè)SecurityFilterChain。
2、認(rèn)證模塊的實(shí)現(xiàn)?
SecurityContextHolder(用于存儲(chǔ)授權(quán)信息)
手動(dòng)授權(quán)的例子(SecurityContextHolder.getContext().setAuthentication(authentication)這種授權(quán)方式多線程不安全):
除了手動(dòng)授權(quán)外,SpringSecurity通過AuthenticationManager和ProviderManager進(jìn)行授權(quán)。其中AuthenticationProvider代表不同的認(rèn)證機(jī)制(最常用的賬號(hào)/密碼)。
ProviderManager
AuthenticationManager
3、授權(quán)模塊的實(shí)現(xiàn)?
認(rèn)證完成之后,SpringSecurity通過AccessDecisionManager 完成授權(quán)操作。除了全局的授權(quán)配置之外,也可以通過@PreAuthorize, @PreFilter, @PostAuthorize , @PostFilter注解實(shí)現(xiàn)方法級(jí)別的權(quán)限控制。