반응형
스프링 보안:WebSecurityConfigurer 어댑터가 없는 Global Authentication Manager
WebSecurityConfigurerAdapter를 제거하려고 합니다.Authentication Manager는 다음과 같이 구성됩니다.
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public static class DefaultSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
@Bean
public AuthenticationManager authenticationManager() throws Exception {
return super.authenticationManager();
}
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.userDetailsService(userDetailsService())
.passwordEncoder(passwordEncoder());
}
WebSecurityConfigurerAdapteri를 사용하지 않고 다음과 같이 글로벌 AuthenticationManager를 정의합니다.
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public static class DefaultSecurityConfig {
@Bean
public AuthenticationManager authenticationManager(AuthenticationManagerBuilder auth ) throws Exception {
return auth.userDetailsService(userDetailsService())
.passwordEncoder(passwordEncoder()).and().build();
}
그리고 나는 오류를 이해합니다.
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration': Unsatisfied dependency expressed through method 'setFilterChains' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'defaultSecurityFilterChain' defined in class path resource [org/springframework/boot/autoconfigure/security/servlet/SpringBootWebSecurityConfiguration.class]: Unsatisfied dependency expressed through method 'defaultSecurityFilterChain' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration.httpSecurity' defined in class path resource [org/springframework/security/config/annotation/web/configuration/HttpSecurityConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.security.config.annotation.web.builders.HttpSecurity]: Factory method 'httpSecurity' threw exception; nested exception is java.lang.IllegalStateException: Cannot apply org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration$EnableGlobalAuthenticationAutowiredConfigurer@536a79bd to already built object
Spring Boot v2.6.4를 사용하고 있습니다.
저는 여기에 잠시 갇혀 있습니다. 어떤 도움이라도 주시면 감사하겠습니다.
교체하다
@Bean
public AuthenticationManager authenticationManager(AuthenticationManagerBuilder auth ) throws Exception {
return auth.userDetailsService(userDetailsService())
.passwordEncoder(passwordEncoder()).and().build();
}
타고
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration)
throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
내 프로젝트에서, 나는 사용할 필요가 있었습니다.AuthenticationManager
사용자 지정 로그인을 수행합니다.그리고 선언합니다.
@RestController
@RequestMapping("/api/login")
@Slf4j
@RequiredArgsConstructor
public class LoginResource {
private final AuthenticationManager authenticationManager;
....
}
인SecurityConfig
:
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig {
private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint;
private final JwtRequestFilter jwtRequestFilter;
private final UserDetailsService jwtUserDetailsService;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/api/login").permitAll()
.anyRequest().authenticated()
.and()
.exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint).and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
// Add a filter to validate the tokens with every request
http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
return http.build();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public AuthenticationManager authenticationManagerBean(HttpSecurity http) throws Exception {
AuthenticationManagerBuilder authenticationManagerBuilder = http.getSharedObject(AuthenticationManagerBuilder.class);
authenticationManagerBuilder.userDetailsService(jwtUserDetailsService).passwordEncoder(passwordEncoder());
return authenticationManagerBuilder.build();
}
}
그럼 나한테 잘 먹히네요!!
코드를 아래 섹션으로 바꿉니다.
내 코드에서 잘 작동하기를 바랍니다.
@Bean
public AuthenticationManager authenticationManagerBean(HttpSecurity http) throws Exception {
AuthenticationManagerBuilder authenticationManagerBuilder = http.getSharedObject(AuthenticationManagerBuilder.class);
authenticationManagerBuilder
.userDetailsService(jwtUserDetailsService)
.passwordEncoder(passwordEncoder());
return authenticationManagerBuilder.build();
}
100% 테스트 완료.시도해 보세요.
@Configuration
@RequiredArgsConstructor // lombok
public class YourConfigClass {
private final UserDetailsService userService;
private final AuthenticationConfiguration configuration;
@Autowired
void configure(AuthenticationManagerBuilder builder) throws Exception {
builder.userDetailsService(userService)
.passwordEncoder(new BCryptPasswordEncoder());
}
@Bean
AuthenticationManager authenticationManager() throws Exception {
return configuration.getAuthenticationManager();
}
// OR use
// Remove or comment out: private final AuthenticationConfiguration configuration;
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
}
언급URL : https://stackoverflow.com/questions/71605941/spring-security-global-authenticationmanager-without-the-websecurityconfigurera
반응형
'programing' 카테고리의 다른 글
parseInt vs sunaryplus, 어떤 것을 사용해야 합니까? (0) | 2023.07.26 |
---|---|
각도 2 - 라우팅 - 관찰 가능한 작업을 활성화할 수 있음 (0) | 2023.07.26 |
이미지 업로드 후 dropzone.js 섬네일 이미지 지우기 (0) | 2023.07.26 |
매개 변수로 char* vs const char* (0) | 2023.07.26 |
MySQL ERROR 1231(42000):변수 'character_set_client'를 'NULL' 값으로 설정할 수 없습니다. (0) | 2023.07.26 |