spring security 的架構與實現

本部分鏈接:http://docs.spring.io/spring-security/site/docs/4.2.2.RELEASE/reference/htmlsingle/#overall-architecturehtml

aop與spring security,

通常在服務層使用spring aop來保護方法調用. 若是在領域層,則使用aspectJ來保護. 固然保護web請求,直接使用web攔截器web

存儲SecurityContext

使用SecurityContextPersistenceFilter,能夠在不一樣的線程中共享SecurityContext,在request結束後清空SecurityContext.spring

AuthenticationManager

驗證完用戶後,會將用用認證信息傳保存到SecurityContextHolder裏.數據庫

AccessDecissionManager

spring security message localize

spring security報錯信息的本地化.ide

<bean id="messageSource" class="org.spring.framework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:org/springframework/security/messages">
</bean>

核心服務

認證管理者,生產商管理者,認證生產商

ProviderManager調用AuthenticationProvider來驗證用戶,如DaoAuthenticationProvider,AnonymousAuthenticationProvider,LdapAuthenticationProvider等.編碼

DaoAuthenticationProvider能夠經過設置userDetailService,passwordEncoder來實現.加密

in-memory Authentication能夠不經過數據庫來存儲用戶信息.spa

經過設置xx來實現.線程

密碼機制

不能直接存儲密碼字符,也不能直接使用MD5或SHA來加密密碼.甚至是一個混淆值.Bcrypt被設計爲很是慢以阻礙離線破解. 使用org.springframework.security.bcrypt.BCryptPasswordEncoder是一個好的選擇.設計

若是是一個遺留系統,則須要選擇原有的密碼類型,由於hash是不可逆的.即便值受損害也不會當即暴露.一旦編碼,就沒法暴露.

使用混淆值能夠使攻擊速度放慢.

相關文章
相關標籤/搜索