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
相关推荐
spring-security cookie认证
登录认证方式和spring-boot-security有所不同。该版本登录认证采用自定义的/auth/login方式替代security默认的 /login(当然这个也是可以指定的)登录地址,简单来说也就是在自己的controller中实现了登录方法。这样...
Spring Security:spring家族一员。是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转...
springboot集成spring-security,实现自定义登录认证,代码亲测,同时附带jwt+security集成的代码,亲测可用
spring-security使用数据库用户认证
Springboot + Spring Security 实现前后端分离登录认证及权限控制采用的session模式
spring-security-3.2 资源用于权限控制和系统设置
Spring-Security结合JWT 实现前后端分离完成权限验证功能案例,案例中,主要完成用户登录获取Token,通过Token访问Rest接口,没有权限或授权失败时返回JSON,前端根据状态码进行重新登录;案例中的用户名称: jake_j...
demo包含了两方面的内容:1,用户身份认证;2,用户权限管理,主要使用spring-cloud-security来进行安全管理设计
spring-Security简单例子,实现了对登录,访问权限的一些简单认证
pring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架。 Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别是使用领先的J2EE解决方案-Spring框架开发的企业软件...
springboot项目集成了spring-security oauth2.0框架的一个小案例。 资源服务和认证服务分离了。
Spring Security为基于J2EE企业应用软件提供了全面安全服务。 特别是使用领先的J2EE解决方案-spring框架开发的企业软件项目。 如果你没有使用Spring开发企业软件,我们热情的推荐你仔细研究一下。 熟悉Spring-尤其是...
Springboot集成spring-security实现基于验证码的登录认证项目_源码
spring-security-4.2.2.RELEASE相关的jar包和源码。包含核心的认证和连接控制类和接口,用spring security的框架都需要这些。支持单独的应用程序,远程客户端,方法(服务层) 安全和jdbc的基本服务.
spring-security-digest 示例 该项目演示了使用 RESTful 服务中的 Java 配置使用 Spring-Security 进行摘要式身份验证的用法 请阅读我在帖子
基于springboot 的 Spring Security 认证定制开发的完整案例实现和执行流程的剖析
Spring Web Services WS-Security示例 设置各种协议的样本 SOAP Web服务。 支持WS-Security的两种实现,即和 。 对于每种认证方法,每种认证方法都有一个不同的终结点: 不安全。 普通密码。 摘要密码。 签名...
项目中使用到的技术包含SpringBoot、SpringSecurity&oauth2(安全资源和授权中心模式、包括登录接口自定义返回字段、自定义手机号+密码登录、自定义免密登录)、Queue队列、线程池、xss攻击配置、SpringCache、Mybatis...
本教程是全网最细致地讲解Spring Security、Spring Social 、Spring Security OAuth三种技术开发安全的REST服务,彻底掌握一线互联网公司主流的身份认证和授权方式。 Spring Security是一个能够为基于Spring的企业...