programing

Spring Boot 2.0.0에서 인증 관리자를 자동으로 연결할 수 없습니다.

skycolor 2023. 7. 1. 08:15
반응형

Spring Boot 2.0.0에서 인증 관리자를 자동으로 연결할 수 없습니다.

그래서 저는 간단한 Spring MVC 앱에서 oAuth2를 구현하려고 노력해 왔습니다.

내가 따르던 가이드에서, 그들의AuthorizationServerConfigurerAdapter그들은@Autowired하나의AuthenticationManager그들은 Spring Boot 버전 1.5.2를 사용했습니다.

Spring Boot 2.0.0은 최신 버전이기 때문에 사용하고 싶어서 최신 사례를 배우고 싶었습니다.그러나 변경할 때 pom.xml에서 다음을 수행합니다.

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

대상:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

갑자기 자동 배선이 안 돼요.AuthenticationManager.

Could not autowire. No beans of 'AuthenticationManager' type found.

누가 이것에 대한 해결책을 생각해 낼 수 있습니까?

감사합니다!

부트 스타터 패키지를 계속하려면 릴리스 정보에 따라 재정의해야 합니다.authanticationManagerBean내부의 방법WebSecurityConfigurerAdapter코드 샘플:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

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

}

Spring Boot의 최신 버전2.7.2,학급WebSecurityConfigurerAdapter더 이상 사용되지 않으며 보안 구성을 작성하려면 새로운 스타일을 사용해야 합니다.

WebSecurityConfigurer 어댑터가 없는 Spring Security

Spring Boot 2.7.2에서는 아래와 같은 것이 작동합니다. 들어오는 JWT 토큰을 확인하기 위해 연결해야 하는 JWT 토큰 필터가 있습니다.의 사용법을 강조하려고 합니다.SecurityFilterChain&AuthenticationConfiguration

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
import org.springframework.security.web.util.matcher.RequestMatcher;

//import my custom jwt class package;

import lombok.RequiredArgsConstructor;

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class WebSecurityConfig {

    private final AuthenticationConfiguration authConfiguration;

    @Bean
    public AuthenticationManager authenticationManager() throws Exception {
    return authConfiguration.getAuthenticationManager();
    }

    @Autowired
    public void configure(AuthenticationManagerBuilder builder, AuthenticationProvider jwtAuthenticationProvider) {
    builder.authenticationProvider(jwtAuthenticationProvider);
    }

    @Bean
    public SecurityFilterChain configure(HttpSecurity http, AuthenticationEntryPoint authenticationEntryPoint,
        RequestMatcher requestMatcher)
        throws Exception {
    http.cors().and().csrf().disable().exceptionHandling().authenticationEntryPoint(authenticationEntryPoint).and()
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests()
        .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
        .antMatchers(HttpMethod.GET, List.of("/favicon.ico", "/**/*.html").toArray(new String[0])).permitAll();

    AbstractAuthenticationProcessingFilter jwtFilter = new MyCustomClass(requestMatcher);
    jwtFilter.setAuthenticationManager(authenticationManager());
    http.addFilterBefore(jwtFilter, BasicAuthenticationFilter.class);
    return http.build();
    }
}

언급URL : https://stackoverflow.com/questions/49348551/could-not-autowire-authentication-manager-in-spring-boot-2-0-0

반응형