SpringSecurity报错authenticationManager must be spec的解决

问题描述:

在Spring Security的配置过程中,当我们定义一个WebSecurityConfigurerAdapter时,当我们在configure方法中进行身份验证配置时,有时会遇到authenticationManager must be specified这个问题,这是因为我们没有注入一个AuthenticationManager。

解决方案:

为解决这个问题,我们可以在WebSecurityConfigurerAdapter配置类中注入一个AuthenticationManager以解决这个问题。具体使用方法如下:

1.在WebSecurityConfigurerAdapter配置类中注入一个AuthenticationManager

WebSecurityConfigurerAdapter类有一个authenticationManagerBean()方法,我们在这个方法中创建AuthenticationManager并且返回它,当我们需要访问AuthenticationManager时,就可以使用@Autowired自动装配AuthenticationManager。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  @Autowired
  private UserService userService; //注入用户服务

  @Override
  protected void configure(HttpSecurity http) throws Exception {

  //...
  }

  @Autowired
  public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
    authenticationManagerBuilder.userDetailsService(userService);
  }

  @Bean
  public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
  }

}

我们只需用@Bean注解标注一下这个方法,或者重载WebSecurityConfigurerAdapter类的authenticationManagerBean()方法,它会返回AuthenticationManager的实现类。

示例:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  @Autowired
  private UserService userService; //注入用户服务

  @Override
  protected void configure(HttpSecurity http) throws Exception {

    http
      .authorizeRequests()
      .antMatchers("/admin/**").hasRole("ADMIN")
      .antMatchers("/user/**").authenticated()
      .and()
      .formLogin()
      .loginPage("/login")
      .defaultSuccessUrl("/")
      .permitAll()
      .and()
      .logout()
      .logoutUrl("/logout")
      .logoutSuccessUrl("/login")
      .permitAll();
  }

  @Autowired
  public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
    authenticationManagerBuilder.userDetailsService(userService);
  }

  @Bean
  @Override
  public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
  }

}


在上述示例中,我们注入了一个AuthenticationManager,这样就可以解决authenticationManager must be specified的错误了。

2.通过Java配置注入AuthenticationManager

我们可以通过另一种方式来解决authenticationManager must be specified的错误,即通过Java配置来实现注入AuthenticationManager。

示例:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  @Autowired
  private UserService userService; //注入用户服务

  @Override
  protected void configure(HttpSecurity http) throws Exception {

    http
      .authorizeRequests()
      .antMatchers("/admin/**").hasRole("ADMIN")
      .antMatchers("/user/**").authenticated()
      .and()
      .formLogin()
      .loginPage("/login")
      .defaultSuccessUrl("/")
      .permitAll()
      .and()
      .logout()
      .logoutUrl("/logout")
      .logoutSuccessUrl("/login")
      .permitAll();
  }

  @Bean
  public AuthenticationManager authenticationManager() throws Exception {
    return authenticationManagerBuilder().userDetailsService(userService).build();
  }

}


在上述示例中,我们创建了一个AuthenticationManager Bean,这样就可以解决authenticationManager must be specified的错误了。

结论:

以上两种方法都可以解决authenticationManager must be specified的错误,具体使用哪种方法取决于你的业务需求。如果你同时需要使用AuthenticationManager和AuthenticationManagerBuilde,那么可以尝试使用第二种方法,否则可以使用第一种方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringSecurity报错authenticationManager must be spec的解决 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • aspx 服务器架设问题解决

    以下是关于“aspx服务器架设问题解决”的完整攻略: 问题描述 在架设aspx服务器的过程中,可能会遇到一些问题。本文将详细介绍这些问题的解决方法。 解决步骤 以下是解决“aspx服务器架设问题解决”的步骤: 步骤一:安装IIS 在架设aspx服务器之前,需要先安装IIS可以按照以下步骤来完成: 打开控制面板,选择“程序和功能”。 选择“打开或关闭Windo…

    http 2023年5月13日
    00
  • Nginx添加ipv6模块以及遇到问题解决方案详解(亲测有效)

    Nginx添加ipv6模块以及遇到问题解决方案详解(亲测有效) 介绍 在互联网技术发展的今天,随着IPv6的广泛应用,越来越多的网站逐渐开始启用IPv6服务。而在使用Nginx作为Web服务器的时候,如果要支持IPv6协议,就需要添加ipv6模块,否则无法接收和处理IPv6的请求。但是添加ipv6模块的过程并不是那么轻松愉快,很容易遇到各种问题。本文将详细讲…

    http 2023年5月13日
    00
  • 什么是HTTP缓存异常?

    HTTP缓存异常是指当浏览器缓存与服务器缓存的内容不一致或者服务器返回的缓存控制的响应头不合法时,会导致浏览器无法正确地缓存和加载资源,从而影响网站的性能和速度。 为了避免HTTP缓存异常,可从以下几个方面入手: 1. 合理配置缓存策略 在服务器端设置正确的缓存策略可以让浏览器直接使用本地缓存,减少网络请求,提高用户的访问速度。可以通过在服务器端发送包含正确…

    云计算 2023年4月27日
    00
  • springboot 中 inputStream 神秘消失之谜(终破)

    下面我会详细讲解“springboot中inputStream神秘消失之谜(终破)”的完整攻略。 引言 在使用 Spring Boot 开发过程中,我们常常会使用到 inputStream,例如读取 properties 文件、读取 xml 或者 json 文件等。然而,在某些情况下,我们使用相同的代码在不同环境中运行时,会发现 inputStream 始终…

    http 2023年5月13日
    00
  • nginx七层负载均衡配置详解

    以下是关于“nginx七层负载均衡配置详解”的完整攻略: 简介 Nginx是一款高性能的Web服务器和反向代理服务器,也是一款常用的负载均衡器。本文将介绍如何使用Nginx进行七层负载均衡配置。 Nginx七层负载均衡 Nginx可以通过配置文件实现七层负载均衡。以下是一个简单的Nginx负载均衡配置文件示例: http { upstream backend…

    http 2023年5月13日
    00
  • 深入讲解xhr(XMLHttpRequest)/jsonp请求之abort

    以下是关于“深入讲解xhr(XMLHttpRequest)/jsonp请求之abort”的完整攻略: 简介 在使用xhr(XMLHttpRequest)或jsonp请求时,有时候需要中断请求,这可能会影响网站的性能用户体验。本文将深入解如何使用abort方法中断xhr或jsonp请求,并提供两个示例说明。 xhr请求中断 使用xhr请求时,可以使用abort…

    http 2023年5月13日
    00
  • HTTP的缓存机制是什么?

    HTTP缓存机制指的是浏览器在向服务器请求资源时,会根据规则对响应结果做出缓存,从而提升了网站响应速度和用户体验。常见的缓存机制主要包括强缓存和协商缓存两种。 强缓存 强缓存是指浏览器在向服务器请求资源时,直接从本地缓存中读取该资源,不经过服务器的验证。强缓存可以通过设置 Expires 或 Cache-Control 首部字段来实现。 Expires Ex…

    Http网络协议 2023年4月20日
    00
  • HTTP的重定向机制是什么?

    HTTP重定向机制是指,服务器在收到客户端请求后,返回的响应中包含指示客户端重新请求其他URI的状态码和URI地址。当客户端收到重定向响应后,会自动发送新的请求到重定向的URI地址,完成整个页面的加载。 HTTP重定向可分为两类:客户端重定向和服务端重定向。 客户端重定向是指,在客户端浏览器内部实现的重定向,不会向服务器发送新的请求。例如,使用JavaScr…

    Http网络协议 2023年4月20日
    00
合作推广
合作推广
分享本页
返回顶部