首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring boot :在自定义UserDetailsService中自动装配authenticationManager时,delegateBuilder不能为空

Spring Boot是一个用于简化Spring应用程序开发的框架。它基于Spring框架,提供了一种快速构建独立、可运行的、生产级的Spring应用程序的方式。

在自定义UserDetailsService中自动装配authenticationManager时,delegateBuilder不能为空。这是因为在Spring Security中,authenticationManager是用于处理认证的核心接口,它负责验证用户的身份和凭证。而在自定义UserDetailsService中,我们需要使用authenticationManager来进行用户认证。

在Spring Boot中,我们可以通过在配置类中使用@EnableWebSecurity注解来启用Spring Security,并自定义UserDetailsService来实现用户认证。在自定义UserDetailsService中,我们可以使用@Autowired注解来自动装配authenticationManager。

然而,当我们在自定义UserDetailsService中自动装配authenticationManager时,如果delegateBuilder为空,就会抛出异常。这是因为delegateBuilder是用于构建authenticationManager的一个关键组件,如果为空,就无法正确构建authenticationManager。

为了解决这个问题,我们可以在配置类中添加一个方法,用于创建authenticationManager的delegateBuilder。具体步骤如下:

  1. 在配置类中添加一个方法,返回一个AuthenticationManagerBuilder类型的对象。命名为authenticationManagerBuilder。
  2. 在该方法中,使用authenticationManagerBuilder对象的userDetailsService方法来设置自定义的UserDetailsService。
  3. 最后,使用authenticationManagerBuilder对象的build方法来构建authenticationManager的delegateBuilder。

下面是一个示例代码:

代码语言:txt
复制
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Bean
    public AuthenticationManagerBuilder authenticationManagerBuilder() throws Exception {
        return new AuthenticationManagerBuilder()
                .userDetailsService(userDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 配置HTTP请求的安全性
        http
            .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .and()
            .logout()
                .and()
            .csrf().disable();
    }
}

在上述示例中,我们通过authenticationManagerBuilder方法来创建authenticationManager的delegateBuilder,并将自定义的UserDetailsService设置到delegateBuilder中。这样,在自定义UserDetailsService中自动装配authenticationManager时,就不会出现delegateBuilder为空的问题了。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(Mobile):https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(Blockchain):https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse

请注意,以上链接仅供参考,具体选择产品时需要根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring Security 实战干货——搞清楚UserDetails

本篇将通过 Spring Boot 2.x 来讲解 Spring Security 的用户主体UserDetails。以及从中找点乐子。 2....AuthenticationManagerSpring 容器存在Bean ObjectPostProcessor并且不存在Bean AuthenticationManager, AuthenticationProvider...12345上使用了前缀{noop} 意味着你的密码不使用加密,authorities 一定不能为 这代表用户的角色权限集合 UserDetails felordcn = User.withUsername...总结 今天我们对Spring Security 的用户信息 UserDetails 相关进行的一些解读。并自定义了用户信息处理服务。...相信你已经对Spring Security如何加载用户信息,如何扩展用户信息有所掌握了。后面我们会由浅入深慢慢解读Spring Security。

1.6K20

Spring Security6 全新写法,大变样!

当然我现在的用户是存在内存的,如果你的用户是存在数据库,那么只需要提供 UserDetailsService 接口的实现类并注入 Spring 容器即可,这个之前 vhr 视频中讲过多次了(公号后台回复...Security 会拦截下所有的请求,然后一个空集合走一圈就结束了,相当于拦截任何请求。...SecurityContextPersistenceFilter 的过滤器,这个过滤器 Spring Boot2.7.x 废弃了,但是还在使用, Spring Boot3 则被从 Spring...第一小节和小伙伴们介绍的两种 JSON 登录方案 Spring Boot2.x 可以运行在 Spring Boot3.x 无法运行,就是因为这个过滤器的变化导致的。... Spring Security 的自动化配置类,将 securityContextRepository 属性指向了 DelegatingSecurityContextRepository,这是一个代理的存储器

4.4K22
  • 详解SpringSecurity认证

    void initialize(AuthenticationManagerBuilder builder) { //builder.. } } springboot 对 security 进行自动配置自动工厂创建一个全局...AuthenticationManager 总结 默认自动配置创建全局AuthenticationManager 默认找当前项目中是否存在自定义 UserDetailService 实例 自动将当前项目...UserDetailService 实例设置为数据源 默认自动配置创建全局AuthenticationManager 工厂中使用时直接在代码中注入即可 自定义全局 AuthenticationManager...AuthenticationManager实现 就回将工厂自动配置AuthenticationManager 进行覆盖 一旦通过 configure 方法自定义 AuthenticationManager...对象工厂内部本地一个 AuthenticationManager 对象 不允许在其他自定义组件中进行注入 用来工厂暴露自定义AuthenticationManager 实例 @Configuration

    21210

    Spring Boot:整合Spring Security

    = null) { // 请求令牌不能为 if(SecurityUtils.getAuthentication() == null) {...如果直接定制UserDetailsService ,而不自定义 AuthenticationProvider,可以直接在配置文件 WebSecurityConfig 这样配置。...如果默认实现满足不了你的需求,可以根据需求定制自己的 UserDetails,然后 UserDetailsService 的 loadUserByUsername 返回即可。...接口访问权限 通过比如浏览器使用URL访问后台接口,是否允许访问此URL,就是接口访问权限。 进行接口访问,会由 FilterSecurityInterceptor 进行拦截并进行授权。...Boot:整合MyBatis框架 Spring Boot:实现MyBatis分页 Spring Boot:集成Druid数据源 Spring Boot:实现MyBatis动态数据源 Spring Boot

    3.3K21

    Spring Boot 2.X(十八):集成 Spring Security-登录认证和权限控制

    前言 企业项目开发,对系统的安全和权限控制往往是必需的,常见的安全框架有 Spring Security、Apache Shiro 等。...本文主要简单介绍一下 Spring Security,再通过 Spring Boot 集成开发一个简单的示例。 Spring Security 什么是 Spring Security?...然后再将 Authentication 设置到 SecurityContextHolder 容器AuthenticationManager 接口是认证相关的核心接口,也是发起认证的入口。...1.1 技术栈 编程语言:Java 编程框架:SpringSpring MVC、Spring Boot ORM 框架:MyBatis 视图模板引擎:Thymeleaf 安全框架:Spring Security...WebSecurityConfigurerAdapter 自定义 Spring Security 配置 /** prePostEnabled :决定Spring Security的前注解是否可用 [@

    3.5K21

    springsecurity默认用户生成

    的过滤器,并注入到spring容器,这个过滤器将负责所有的安全管理,包括用户的认证,授权,重定向到登录页面等(springSecurityFilterChain实际上代理了SpringSecurity...的过滤器链) 创建一个UserDetailsService实例,UserDetailsService负责提供用户数据,默认的用户数据是基于内存的用户,用户名为user,密码为随机生成的UUID字符串。...默认用户生成 SpringSecurity定义UserDetails接口来规范开发者自定义的用户对象 负责提供用户数据源的接口是UserDetailsService springSecurity为UserDetailsService..."{noop}" + password : password; } } 从上述代码,有两个比较重要的促使系统自动提供一个InMemoryUserDetailsManager的实例: 当前classpath...下存在AuthenticationManager 当前项目中,系统没有提供AuthenticationManager AuthenticationProvider UserDetailsService

    54410

    SpringBoot2.0 整合 SpringSecurity 框架,实现用户权限管理

    它提供了一组可以Spring应用上下文中配置的Bean,充分利用了Spring的IOC,DI,AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为安全控制编写大量重复代码的工作...用户退出自动清除当前线程的认证信息。 初始化源码:明显使用ThreadLocal线程。 private static void initialize() { if (!...可以通过实现AuthenticationManager接口来自定义自己的认证方式,Spring提供了一个默认的实现,ProviderManager。... spring-boot-starter-security 3、核心配置 /** * EnableWebSecurity...Boot 2.0 版本踩坑 * 必须要 ROLE_ 前缀, 因为 hasRole("LEVEL1")判断时会自动加上ROLE_前缀变成 ROLE_LEVEL1 ,

    78150

    Spring Security 实战干货:AuthenticationManager的初始化细节

    前言 今天有个同学告诉我,Security Learning项目的day11分支中出现了一个问题,验证码登录和其它登录兼容了,出现了No Provider异常。还有这事?...虽然Spring Security 实战干货:图解认证管理器 AuthenticationManager一文AuthenticationManager的流程进行了分析,但是还是不够深入,以至于出现了问题...当执行到上面这个方法,如果 Spring IoC 容器存在了多个UserDetailsService,那么这些UserDetailsService就不会生效,影响DaoAuthenticationProvider...真相大白 到此为什么认证的时候找不到原因终于找到了,原来我使用 Spring Security 默认配置(注意这个前提),向Spring IoC注入了多个UserDetailsService导致DaoAuthenticationProvider...也就是说一套配置如果你存在多个UserDetailsServiceSpring Bean 将会影响DaoAuthenticationProvider的注入。

    2.2K31
    领券