[SPRING] 모든 프로 바이더의 후에 Spring Security java.lang.StackOverflowError 예외
SPRING모든 프로 바이더의 후에 Spring Security java.lang.StackOverflowError 예외
환경:
필자는 ActiveDirectory를 타격하는 인증 공급자 2 개와 내가 만든 사용자 지정 데이터베이스 공급자를 공격하는 인증 공급자를 가지고 있습니다. 이러한 환경 중 하나에있는 사용자로 로그인하면 완벽하게 작동합니다. 사용자가 인증되고 앱이 계속됩니다.
그러나 잘못된 사용자가 입력되고 어느 공급자도 인증 할 수 없으면 페이지에서 다음 예외가 발생합니다.
java.lang.StackOverflowError
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$UserDetailsServiceDelegator.loadUserByUsername(WebSecurityConfigurerAdapter.java:393)
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$UserDetailsServiceDelegator.loadUserByUsername(WebSecurityConfigurerAdapter.java:394)
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$UserDetailsServiceDelegator.loadUserByUsername(WebSecurityConfigurerAdapter.java:394)
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$UserDetailsServiceDelegator.loadUserByUsername(WebSecurityConfigurerAdapter.java:394)
다음은 WebSecurityConfigurerAdapter 구성입니다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.formLogin().loginPage("/login").failureUrl("/login?error").defaultSuccessUrl("/overview").permitAll()
.and()
.logout().logoutSuccessUrl("/login?logout").permitAll()
.and()
.authorizeRequests()
.antMatchers("/resources/**").permitAll()
.antMatchers("/favicon.ico").permitAll()
.antMatchers("/**").hasRole("AUTH");
}
@Override
protected void configure(AuthenticationManagerBuilder authManagerBuilder) throws Exception {
authManagerBuilder
.authenticationProvider(activeDirectoryLdapAuthenticationProvider())
.userDetailsService(userDetailsService());
authManagerBuilder
.authenticationProvider(databaseAuthenticationProvider())
.userDetailsService(userDetailsService());
}
@Bean
public ActiveDirectoryLdapAuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(DOMAIN, URL);
provider.setConvertSubErrorCodesToExceptions(true);
provider.setUseAuthenticationRequestCredentials(true);
provider.setUserDetailsContextMapper(userDetailsContextMapper());
return provider;
}
@Bean
public UserDetailsContextMapper userDetailsContextMapper() {
UserDetailsContextMapper contextMapper = new MyUserDetailsContextMapper();
return contextMapper;
}
@Bean
public MyDatabaseAuthenticationProvider databaseAuthenticationProvider() {
return new MyDatabaseAuthenticationProvider();
}
"MyDatabaseAuthenticationProvider"또는 "MyUserDetailsContextMapper"클래스에는 사용자를 매핑하고 찾는 데 필요한 몇 가지 사용자 지정 논리를 제외하고는 특별한 것이 없습니다.
앱이 다운되지는 않지만 분명히 사용자에게 보여주고 싶은 페이지가 아닙니다. :)
StackOverflowError 제거 방법에 대한 생각은?
해결법
-
==============================
1.나는 똑같은 문제가 있었는데, 이것이 나를위한 해결책이었다.
나는 똑같은 문제가 있었는데, 이것이 나를위한 해결책이었다.
@Override protected void configure(AuthenticationManagerBuilder authManagerBuilder) throws Exception { ... .userDetailsService(userDetailsService()); ... }
userDetailsService 다음에 괄호가있는 문제는이를 제거하고 예상대로 작동합니다. 코드 스 니펫에서 userDetailsService를 어디에서 가져올 지 확신 할 수 없지만 나를 위해 @Autowired가 있습니다.
from https://stackoverflow.com/questions/30766106/spring-security-java-lang-stackoverflowerror-exception-after-all-providers by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 부팅로드 orm.xml (0) | 2019.04.10 |
---|---|
[SPRING] 스프링 부트 Autowired가 Configuration 클래스에서 작동하지 않습니다. (0) | 2019.04.10 |
[SPRING] 사용자 정의 메소드 보안 표현식을 작성하는 가장 좋은 방법 (0) | 2019.04.10 |
[SPRING] 나머지 컨트롤러 vs spring-data-rest RepositoryRestResource (0) | 2019.04.10 |
[SPRING] Jetty에서는 파일 업로드가 작동하지만 Tomcat에서는 작동하지 않습니다. (0) | 2019.04.10 |