Spring-security默认提供的AuthenticationProvider
Spring –security 提供了很多AuthenticationProvider的实现了,这里是画出了spring-security默认采用的。
AbstractUserDetailsAuthenticationProvider
实现了AuthenticationProvider提供的authenticate和support方法。
在authenticate方法中做了如下的操作:
1. 根据用户提交的用户名从缓存中查询UserDetails
2. 若没有在缓存中查询到UserDetails,那么就调用retrieveUser检索UserDetails,这个方法是一个抽象方法,在子类中实现;若在子类中没有查询到UserDetails,那么就会抛出UsernameNotFoundException,在AbstractUserDetailsAuthenticationProvider捕获了这个异常并且进行了处理
3. 接着开始检查UserDetails(不论是从缓存中获取的UserDetails,还是检索出来的UserDetails,都要进行检查),主要包括的检测有user是否已经过期,是否已经被锁定等等,在AbstractUserDetailsAuthenticationProvider没有检测用户输入的密码是否正确,在检查这一步调用了抽象
additionalAuthenticationChecks,所有在子类中要实现密码是否匹配的检测
4. 若通过了所有的检测,那么就判断是否这个UserDetails已经放入到了缓存中,若没有那么就放入到缓存中。
5. 最后返回一个包含了用户完整信息的UsernamePasswordAuthenticationToken,包括用户名,密码,权限等等。
DaoAuthenticationProvider
继承了AbstractUserDetailsAuthenticationProvider提供的additionalAuthenticationChecks 和retrieveUser方法
在retrieveUser方法中的操作:调用了UserDetailsService接口的loadUserByUsername方法,当然这里UserDetailsService可以是自己实现,也可以是使用spring-security提供的JdbcImpl
在additionalAuthenticationChecks方法中的操作:主要做的就是密码的检测,判断用户提交的密码是否正确。在DaoAuthenticationProvider中可以设置加密器和salt,默认是没有设置salt,默认加密器是PlaintextPasswordEncoder
添加密码加密器Password Encoder
1. 修改项目中的security.xml:
<bean name="bcryptEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/> <security:authentication-manager> <security:authentication-provider> <security:password-encoder ref="bcryptEncoder"/> <security:jdbc-user-service data-source-ref="securityDataSource"/> </security:authentication-provider> </security:authentication-manager>
2. 修改数据库中的用户的密码为加密后的密码:$2a$10$aEI7rNMQ86QnrDeg1Sjdbux0XULhucRtVUEAtqMoJK0dVgIO0m53G
在spring-security中提供了2个PasswordEncoder接口,实现的方式也不一样,spring-security建议使用org.springframework.security.crypto.password.PasswordEncoder接口,使用这个接口那么就不能设置salt,否则会抛出异常。具体代码查看DaoAuthenticationProvider的setPasswordEncoder方法
SecurityContext ,SecurityContextHolder
SecurityContext:
public interface SecurityContext extends Serializable {
Authentication getAuthentication();
void setAuthentication(Authentication authentication);
}
这个主要是保存了用户认证成功后的认证信息(用户名,密码,权限等)
SecurityContextHolder:系统中所有SecurityContext的持有者,相当于一个SecurityContext对象的容器。SecurityContextHolder有三种策略来保存SecurityContext;
1. ThreadLocalSecurityContextHolderStrategy 这是spring-security默认采用的方式,保存到ThreadLocal中的好处是一次请求到服务器后,我们可以在任何层获取到登录用户的认证现在,不用通过传递request或session
2. InheritableThreadLocalSecurityContextHolderStrategy
3. GlobalSecurityContextHolderStrategy
相关推荐
10. **spring-security-config-3.1.2.RELEASE.jar**:提供了基于XML或Java的配置方式,用于定义安全规则和策略,如定义访问控制列表,自定义过滤器链等。 通过以上这些jar包,我们可以深入研究Spring Security Web...
1. **用户认证**:Spring Security 提供了多种认证机制,包括基于内存的用户细节服务、数据库连接的用户细节服务,甚至可以自定义认证提供者。它支持基本认证、表单登录、OAuth2等多种认证方式,确保只有经过验证的...
Acegi Security提供了一套基于Spring的认证和授权机制,但在Spring Security 2.x版本之后,大部分功能已被Spring Security自身所取代。 3. **spring-security-core-tiger-2.0.5.RELEASE-tests.jar**:这是一个测试...
Spring Security OAuth2提供了对这些角色的支持,包括认证流程、令牌管理、权限范围定义等功能。它还与Spring Security的其他模块无缝集成,可以与其他安全机制如用户名/密码认证、JWT令牌等配合使用。 在实际项目...
这些jar包共同构成了Spring Security 3.1.4的完整框架,为企业级应用提供了强大的安全基础设施,涵盖了从Web应用到分布式系统,从本地用户认证到第三方服务集成的各种安全需求。开发者可以根据实际项目需求选择和...
5. **集成其他认证机制**:除了内存中的用户,Spring Security还支持数据库、LDAP、OAuth2等多种认证方式。 6. **自定义登录页面**:默认的登录页面是`/login`,你可以通过配置`loginPage`属性来自定义登录页面。 ...
Spring Security提供Remember Me服务,可以让用户在一段时间内免登录访问,通过在cookie中存储安全的凭据实现。 5. **CSRF防护**: 默认情况下,Spring Security开启CSRF防护,通过生成并验证CSRF令牌,防止跨站...
在Spring Security 4.0.0中,这些jar包一起工作,提供了一套完整的解决方案,用于实现用户认证(验证用户身份)和授权(决定用户是否允许访问特定资源)。例如,`spring-security-core`负责基本的认证和授权逻辑,`...
在Spring Boot中,Spring Security 提供了一种简单而有效的方式来保护应用程序,防止未经授权的访问。本资料“spring-security-material-master.zip”显然是一份关于Spring Security的教程材料,特别关注的是在...
本项目“spring-security-oauth2-authorization-server”将带你深入理解如何利用Spring Security OAuth2构建一个授权服务器,以保护你的API并提供安全的访问控制。 OAuth2是一种开放标准,用于授权第三方应用访问...
3.1.0.RC1版本中,提供了多种认证方式,如基于内存的用户信息存储、JDBC认证等。 3. **Filter Chain**:Spring Security通过一系列过滤器(Filter)实现请求的拦截和处理。在3.1.0.RC1中,这些过滤器如`...
这个"spring-security-3.1.4"版本是该框架的一个稳定发行版,提供了在2012年的安全解决方案。这个zip包包含了Spring Security的核心库、文档、示例代码和其他必要的资源,便于开发者下载和学习。 Spring Security的...
`spring-security-oauth2`提供了与`spring-security-web`的集成,使得资源服务器能够直接使用Spring Security的过滤链进行安全控制。 3. **ClientDetailsService**: 该服务接口用于存储和验证OAuth2客户端的信息,...
1. **spring-security-config**:这个模块提供了配置Spring Security的核心API。它包含安全元数据(如`@Secured`和`@PreAuthorize`注解)和XML配置元素,如`<http>`和`<authentication-manager>`,用于定义安全策略...
1. GroupSearchFilter:Spring Security LDAP提供了GroupSearchFilter,可以在认证成功后搜索用户所属的组信息,实现基于组的角色分配和权限控制。 2. AuthoritiesPopulator:此接口用于将从LDAP获取的用户角色转换...
Spring Security 是一个强大的安全框架,用于Java和Spring应用程序。它为Web应用提供了全面的安全解决...在实际开发中,结合文件"springsecurity"中的示例代码,可以更好地理解和实践Spring Security的Cookie认证功能。
在IT领域,Spring Security和Spring Boot是两个极为重要的组件,它们为开发者提供了强大的安全管理和应用程序构建能力。本篇将详细讲解如何将Spring Security集成到Spring Boot项目中,以及涉及到的相关知识点。 一...
Spring Security OAuth2 是一个强大的框架,用于在Spring应用程序中实现安全性和身份验证。...通过理解OAuth2的工作原理和Spring Security的集成方式,开发者可以构建出更加健壮、安全的微服务架构。
- **认证**:Spring Security提供了多种认证方式,如基于表单的登录、HTTP基本认证、JWT等。用户可以通过自定义AuthenticationProvider实现自己的认证逻辑,确保用户身份的正确性。 - **授权**:Spring Security的...
Spring Security通过`spring-security-core`模块提供了全面的安全管理能力,它将认证、授权、会话管理和安全配置等抽象成易于使用的组件。深入理解这个源代码包,有助于开发者构建更安全、更可靠的Java应用程序。...