当前位置:   article > 正文

Spring Security6.x认证模块核心——AuthenticationProvider解析_authentiacationprovider

authentiacationprovider

系列文章目录

推荐预热博文:Spring Security6.x认证架构解析


目录

前言

一、模块核心结构展示

二、结构说明

总结


前言

        该文介绍AuthenticationProvider的功能,以及与UserDetailService的关系。


一、模块核心结构展示

二、结构说明

        1.AuthenticationProvider是接口,抽象方法是authenticate(),之前的博文介绍过,AuthenticationProvider是认证逻辑的提供者,每一个实现AuthenticationProvider接口的类,都将成为认证逻辑的实际提供者,并交给ProviderManager去迭代执行;

        2.图示中的"UsernamePasswordAuthenticationToken"是一个Authentication对象;

        3.DaoAuthenticationProvider是AuthenticationProvider的实现类,它的认证逻辑是:将当前用户的密码和内存/jdbc/ldap中被检索用户的密码进行对比;

        4.DaoAuthenticationProvider中有三个核心方法:addtionalAuthentiationChecks(),authenticate(),createSuccessAuthentication();

        5.authenticate():先检索用户,再比对密码,最后返回对象,对象中有新的认证状态;

                检索依据是:当前待认证用户的principal,即Authtication对象的principal属性;

                检索位置是:当前内存中,或者jdbc中,或者ldap中,取决于你使用的UserDetailService;默认情况下,使用的UserDetailService是在内存中进行检索;这种情况下,需要你对UserDetailService先设置几个用户,如下:

  1. @Bean
  2. public UserDetailsService userDetailsService() {
  3. UserDetails userDetails = User.withDefaultPasswordEncoder()
  4. .username("user")
  5. .password("123")
  6. .roles("USER")
  7. .build();
  8. return new InMemoryUserDetailsManager(userDetails);
  9. }

        6.AuthenticationProvider和UserDetailService的关系如图所示,UserDetailService用以存储用户,在认证阶段,AuthenticationProvider会从UserDetailService的实现类中,检索出用户,与当前用户进行比对;

        7.UserDetailService的实现方法有很多,基于内存的/基于jdbc的/基于ldap的,最常见的,也是作为基础教程使用的,是基于内存的实现方法;

        8.UserDetail是实际的user对象,包含用户名/密码,这无需赘述;


总结

        如果你了解Java web相关开发技术,经过这系列博文介绍,你会对Spring Security的认证模块有一个更全面的了解,对你在公司中实际运用Spring Security会有一个直接的帮助;后续会继续补充介绍该模块的内容(包括直观的代码教程等),以及最重要的,接下来会加入授权和oauth2.0这两个重要模块的内容,完善Spring Security整个体系的介绍。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/534069
推荐阅读
相关标签
  

闽ICP备14008679号