通常在服務層使用spring aop來保護方法調用. 若是在領域層,則使用aspectJ來保護. 固然保護web請求,直接使用web攔截器web
使用SecurityContextPersistenceFilter,能夠在不一樣的線程中共享SecurityContext,在request結束後清空SecurityContext.spring
驗證完用戶後,會將用用認證信息傳保存到SecurityContextHolder裏.數據庫
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是不可逆的.即便值受損害也不會當即暴露.一旦編碼,就沒法暴露.
使用混淆值能夠使攻擊速度放慢.