簡單談談其中的要點
1、基于Filter技術實現?
首先SpringSecurity是基于Filter技術實現的。Spring通過DelegatingFilterProxy建立Web容器和Spring ApplicationContext的聯系,而SpringSecurity使用FilterChainProxy 注冊SecurityFilterChain。
2、認證模塊的實現?
SecurityContextHolder(用于存儲授權信息)
手動授權的例子(SecurityContextHolder.getContext().setAuthentication(authentication)這種授權方式多線程不安全):
除了手動授權外,SpringSecurity通過AuthenticationManager和ProviderManager進行授權。其中AuthenticationProvider代表不同的認證機制(最常用的賬號/密碼)。
ProviderManager
AuthenticationManager
3、授權模塊的實現?
認證完成之后,SpringSecurity通過AccessDecisionManager 完成授權操作。除了全局的授權配置之外,也可以通過@PreAuthorize, @PreFilter, @PostAuthorize , @PostFilter注解實現方法級別的權限控制。