当前位置: 首页 > 知识库问答 >
问题:

重写配置(AuthentiationManageraBuilder)方法与仅创建DaoAuthentiationProvider之间的区别

柴宝
2023-03-14

我正在尝试使用JPA进行Spring Security身份验证。我遇到了两个youtube频道(Java大脑)和(Telusko)。Java大脑的家伙已经覆盖了来自WebSecurityConfigrer的配置(身份验证管理器构建器身份验证)方法,而Telusko的家伙使用了一个bean用于设置DaoAuthentiationProvider以配置userDetailService。我知道身份验证管理器调用身份验证提供商,它会调用用户详细服务来加载用户。如果我错了,请纠正。有人能解释这两种方法在幕后的区别是什么吗?提前感谢。

共有1个答案

仲法
2023-03-14

区别在于身份验证的一种方式(DaoAuthenticationProvider)与开放更多选择的方式(AuthenticationManagerBuilder)。通过配置DaoAuthenticationProvider,意味着您选择“Dao”/“userDetailService”对用户进行身份验证。Spring Security使用身份验证管理器进行身份验证,ProviderManager是默认的身份验证管理器,它通过AuthenticationProviders列表迭代身份验证请求。DaoAuthenticationProvider就是其中之一。

通过使用html" target="_blank">方法:configure(authenticationmanagerbuilderauth)配置身份验证管理器,您可以更灵活地配置身份验证管理器以使用自定义的身份验证提供程序。(您可以使用CustomAuthenticationProvider实现AuthenticationProvider接口)

    @Autowired
    private CustomAuthenticationProvider customAuthProvider;

    @Override
    public void configure(AuthenticationManagerBuilder auth)  {
        auth.authenticationProvider(customAuthProvider);
    }

您还可以通过简单地提供用户详细信息服务来配置DaoAuthentiationProvider,因为AuthentiationManagerBuilder将把它连接起来。

    @Autowired
    private CustomUserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }

尽管如此,使用AuthenticationManagerBuilder更为常见,因为它可以用于配置不同类型的身份验证提供程序。

 类似资料:
  • 本文向大家介绍C#中的方法重写和方法隐藏之间的区别,包括了C#中的方法重写和方法隐藏之间的区别的使用技巧和注意事项,需要的朋友参考一下 在C#中,有两种机制可以通过其子类重新定义或提供父类方法的新实现,这两种机制被称为“方法重写”和“方法隐藏”。现在,基于重新实现方法的方式,我们可以区分两者。 以下是方法重写和方法隐藏之间的重要区别。 序号 键 方法覆盖 方法隐藏 1 定义 方法重写是一种实现多态

  • 问题内容: 请说明对象一和对象二的区别: 欧宝级扩展了轿车。 问题答案: 您可以重新分配给的其他某个子类的对象: 但是您不能那样重新分配,因为它仅限于。 如果是在类中定义的方法,而不是在类中定义的方法,则如果这样做,编译器将给您一个错误: 但这没关系: 由于它知道仅限于,因此它知道该方法将存在。 通常,您希望将变量声明为尽可能 广泛的 类型。也就是说,如果您仅要使用中的方法,则请使用type声明它

  • 问题内容: 建立: BabelJS(ES2015,React,Stage-1) Webpack React / Redux CommonJS和ES6的新功能。我知道对象实例和方法的静态容器之间的区别,但是我不确定它们分离到模块后的行为。所以我想知道返回实例之间有什么区别(此模式完全有效吗?): 并导出const方法: 方法A:每次导入时都会有一个新实例吗? 方法B:使用对象分解功能的好处之一: 然

  • 我不明白这两种模式之间的区别。通配符只能扩展我的类吗?泛型方法不能吗?但是我不认为这是答案。

  • 问题内容: 我是android的新手,我使用以下命令打印log-cat: 和日志文本打印,但搜索了一段时间后,我发现了其他一些打印logcat的方法,例如: 现在我对这些方法感到困惑。 哪种方法最适合打印log-cat,如何打印lagcat,它们之间的主要区别是什么? 问题答案: 常用的方法有五种: 详细 调试 信息 警告 错误 1: -调试 颜色为black ,将输出任何消息,其中v表示详细的详

  • 问题内容: 我最近修复了一个错误,但仍然不知道为什么会发生。我在Django模型中将以下时间戳(纪元)转换为datetimefield: 上面的 返回的datetime对象始终 与真实的纪元时间(在我们的时区中)相距 39分钟 。 我设法通过移除来解决了这一问题,而是将时区放入了方法中: 那么,指定方法内部与创建对象之后进行操作有什么区别?为什么返回错误的时间? 问题答案: 请注意第一种情况下的奇