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

系列文章目录

推荐预热博文: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先设置几个用户,如下:

    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails userDetails = User.withDefaultPasswordEncoder()
                .username("user")
                .password("123")
                .roles("USER")
                .build();
        return new InMemoryUserDetailsManager(userDetails);
    }

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

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

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


总结

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值