`
确实比较男
  • 浏览: 115035 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
阅读更多

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中的好处是一次请求到服务器后,我们可以在任何层获取到登录用户的认证现在,不用通过传递requestsession

2. InheritableThreadLocalSecurityContextHolderStrategy

3. GlobalSecurityContextHolderStrategy 

 

 

 

  • 大小: 89.7 KB
分享到:
评论

相关推荐

    spring-security-web源码所需jar包

    10. **spring-security-config-3.1.2.RELEASE.jar**:提供了基于XML或Java的配置方式,用于定义安全规则和策略,如定义访问控制列表,自定义过滤器链等。 通过以上这些jar包,我们可以深入研究Spring Security Web...

    spring-security Jar包

    1. **用户认证**:Spring Security 提供了多种认证机制,包括基于内存的用户细节服务、数据库连接的用户细节服务,甚至可以自定义认证提供者。它支持基本认证、表单登录、OAuth2等多种认证方式,确保只有经过验证的...

    spring-security所需要的jar包,

    Acegi Security提供了一套基于Spring的认证和授权机制,但在Spring Security 2.x版本之后,大部分功能已被Spring Security自身所取代。 3. **spring-security-core-tiger-2.0.5.RELEASE-tests.jar**:这是一个测试...

    spring-security-oauth2-2.0.3.jar(包括jar包,源码,doc)

    Spring Security OAuth2提供了对这些角色的支持,包括认证流程、令牌管理、权限范围定义等功能。它还与Spring Security的其他模块无缝集成,可以与其他安全机制如用户名/密码认证、JWT令牌等配合使用。 在实际项目...

    spring-security3.1.4 完整的jar包

    这些jar包共同构成了Spring Security 3.1.4的完整框架,为企业级应用提供了强大的安全基础设施,涵盖了从Web应用到分布式系统,从本地用户认证到第三方服务集成的各种安全需求。开发者可以根据实际项目需求选择和...

    spring-boot-security

    5. **集成其他认证机制**:除了内存中的用户,Spring Security还支持数据库、LDAP、OAuth2等多种认证方式。 6. **自定义登录页面**:默认的登录页面是`/login`,你可以通过配置`loginPage`属性来自定义登录页面。 ...

    spring-security源代码

    Spring Security提供Remember Me服务,可以让用户在一段时间内免登录访问,通过在cookie中存储安全的凭据实现。 5. **CSRF防护**: 默认情况下,Spring Security开启CSRF防护,通过生成并验证CSRF令牌,防止跨站...

    spring security 4.0.0所需jar包

    在Spring Security 4.0.0中,这些jar包一起工作,提供了一套完整的解决方案,用于实现用户认证(验证用户身份)和授权(决定用户是否允许访问特定资源)。例如,`spring-security-core`负责基本的认证和授权逻辑,`...

    spring-security-material-master.zip

    在Spring Boot中,Spring Security 提供了一种简单而有效的方式来保护应用程序,防止未经授权的访问。本资料“spring-security-material-master.zip”显然是一份关于Spring Security的教程材料,特别关注的是在...

    spring-security-oauth2-authorization-server.zip

    本项目“spring-security-oauth2-authorization-server”将带你深入理解如何利用Spring Security OAuth2构建一个授权服务器,以保护你的API并提供安全的访问控制。 OAuth2是一种开放标准,用于授权第三方应用访问...

    spring-security-core-3.1.0.RC1.jar

    3.1.0.RC1版本中,提供了多种认证方式,如基于内存的用户信息存储、JDBC认证等。 3. **Filter Chain**:Spring Security通过一系列过滤器(Filter)实现请求的拦截和处理。在3.1.0.RC1中,这些过滤器如`...

    spring-security-3.1.4

    这个"spring-security-3.1.4"版本是该框架的一个稳定发行版,提供了在2012年的安全解决方案。这个zip包包含了Spring Security的核心库、文档、示例代码和其他必要的资源,便于开发者下载和学习。 Spring Security的...

    spring-security-oauth2与spring-security-web 3.1.2 源码

    `spring-security-oauth2`提供了与`spring-security-web`的集成,使得资源服务器能够直接使用Spring Security的过滤链进行安全控制。 3. **ClientDetailsService**: 该服务接口用于存储和验证OAuth2客户端的信息,...

    springsecurity所有jar包

    1. **spring-security-config**:这个模块提供了配置Spring Security的核心API。它包含安全元数据(如`@Secured`和`@PreAuthorize`注解)和XML配置元素,如`&lt;http&gt;`和`&lt;authentication-manager&gt;`,用于定义安全策略...

    spring-security-ldap-2.0.1

    1. GroupSearchFilter:Spring Security LDAP提供了GroupSearchFilter,可以在认证成功后搜索用户所属的组信息,实现基于组的角色分配和权限控制。 2. AuthoritiesPopulator:此接口用于将从LDAP获取的用户角色转换...

    spring-security cookie认证

    Spring Security 是一个强大的安全框架,用于Java和Spring应用程序。它为Web应用提供了全面的安全解决...在实际开发中,结合文件"springsecurity"中的示例代码,可以更好地理解和实践Spring Security的Cookie认证功能。

    Spring-Security-Demo-master.zip

    在IT领域,Spring Security和Spring Boot是两个极为重要的组件,它们为开发者提供了强大的安全管理和应用程序构建能力。本篇将详细讲解如何将Spring Security集成到Spring Boot项目中,以及涉及到的相关知识点。 一...

    spring-Security-oauth2.zip

    Spring Security OAuth2 是一个强大的框架,用于在Spring应用程序中实现安全性和身份验证。...通过理解OAuth2的工作原理和Spring Security的集成方式,开发者可以构建出更加健壮、安全的微服务架构。

    spring-security-2.0.5

    - **认证**:Spring Security提供了多种认证方式,如基于表单的登录、HTTP基本认证、JWT等。用户可以通过自定义AuthenticationProvider实现自己的认证逻辑,确保用户身份的正确性。 - **授权**:Spring Security的...

    spring-security-core-2.0.5.RELEASE.src

    Spring Security通过`spring-security-core`模块提供了全面的安全管理能力,它将认证、授权、会话管理和安全配置等抽象成易于使用的组件。深入理解这个源代码包,有助于开发者构建更安全、更可靠的Java应用程序。...

Global site tag (gtag.js) - Google Analytics