Пользовательская служба UserDetailsService не вызываетсяJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Пользовательская служба UserDetailsService не вызывается

Сообщение Anonymous »

Сегодня я впервые пытаюсь настроить Spring Security и пытаюсь реализовать собственный UserDetailsService. Мне удалось заставить это работать нормально, используя InMemoryUserDetailsManager, описанный в этой статье: https://spring.io/guides/gs/securing-web.
При реализации мой собственный UserDetailsService, однако аутентификация по паролю просто не выполняется без трассировки стека. Я не думаю, что loadUserByUsername вообще вызывается, потому что операторы журналирования не выполняются.
Сейчас я просто пытаюсь заставить его работать с простым фиктивным пользователем. :
Вот моя реализация UserDetailsService:

Код: Выделить всё

@Service
public class AuthApiUserDetailsService implements UserDetailsService {

private static Logger logger = LoggerFactory.getLogger(AuthApiUserDetailsService.class);

@Override
public UserDetails loadUserByUsername(String username) {
logger.debug("Loading user by username");
if (!"user".equals(username)) {
throw new UsernameNotFoundException(username);
}
logger.debug("Loaded user: " + username);
logger.info("This is the testing UserDetails service.  Do a real implementation later.");
return User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build();
}
}
Вот моя конфигурация WebSecurityConfig:

Код: Выделить всё

@Configuration
@EnableWebSecurity
public class WebSecurityConfig {

private static Logger logger = LoggerFactory.getLogger(WebSecurityConfig.class);

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(csrf -> csrf.disable())
.authorizeHttpRequests((requests) -> requests
.requestMatchers("/dashboard").authenticated()
.anyRequest().permitAll()
)
.formLogin((form) -> form
.loginPage("/login")
.permitAll()
)
.logout((logout) -> logout.permitAll());

return http.build();
}

@Bean
public UserDetailsService userDetailsService() {
return new AuthApiUserDetailsService();
}

}
Что бы это ни стоило, я получаю эти сообщения, относящиеся к UserDetailsServiceAutoConfiguration при запуске приложения:

Код: Выделить всё

   UserDetailsServiceAutoConfiguration:
Did not match:
- @ConditionalOnMissingBean (types: org.springframework.security.authentication.AuthenticationManager,org.springframework.security.authentication.AuthenticationProvider,org.springframework.security.core.userdetails.UserDetailsService,org.springframework.security.authentication.AuthenticationManagerResolver,org.springframework.security.oauth2.jwt.JwtDecoder; SearchStrategy: all) found beans of type 'org.springframework.security.core.userdetails.UserDetailsService' authApiUserDetailsService, userDetailsService (OnBeanCondition)
Matched:
- @ConditionalOnClass found required class 'org.springframework.security.authentication.AuthenticationManager' (OnClassCondition)
- AnyNestedCondition 1 matched 2 did not; NestedCondition on UserDetailsServiceAutoConfiguration.MissingAlternativeOrUserPropertiesConfigured.PasswordConfigured @ConditionalOnProperty (spring.security.user.password) did not find property 'password'; NestedCondition on UserDetailsServiceAutoConfiguration.MissingAlternativeOrUserPropertiesConfigured.NameConfigured @ConditionalOnProperty (spring.security.user.name) did not find property 'name';  NestedCondition on UserDetailsServiceAutoConfiguration.MissingAlternativeOrUserPropertiesConfigured.MissingAlternative @ConditionalOnMissingClass did not find unwanted classes 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository', 'org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector', 'org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository' (UserDetailsServiceAutoConfiguration.MissingAlternativeOrUserPropertiesConfigured)

Я также получаю сообщение журнала TRACE при запуске, показывающее исключение ProviderNotFoundException:

Код: Выделить всё

org.springframework.security.authentication.ProviderNotFoundException:  N o   A u t h e n t i c a t i o n P r o v i d e r   f o u n d   f o r   o r g . s p r i n g f r a m e w o r k . s e c u r i t y . a u t h e n t i c a t i o n . U s e r n a m e P a s s w o r d A u t h e n t i c a t i o n T o k e n < b r   / >         a t   o r g . s p r i n g f r a m e w o r k . s e c u r i t y . a u t h e n t i c a t i o n . P r o v i d e r M a n a g e r . a u t h e n t i c a t e ( P r o v i d e r M a n a g e r . j a v a : 2 3 4 ) < b r   / >         a t   o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . a u t h e n t i c a t i o n . U s e r n a m e P a s s w o r d A u t h e n t i c a t i o n F i l t e r . a t t e m p t A u t h e n t i c a t i o n ( U s e r n a m e P a s s w o r d A u t h e n t i c a t i o n F i l t e r . j a v a : 8 5 ) < b r   / >         a t   o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . a u t h e n t i c a t i o n . A b s t r a c t A u t h e n t i c a t i o n P r o c e s s i n g F i l t e r . d o F i l t e r ( A b s t r a c t A u t h e n t i c a t i o n P r o c e s s i n g F i l t e r . j a v a : 2 3 1 ) < b r   / >         a t   o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . a u t h e n t i c a t i o n . A b s t r a c t A u t h e n t i c a t i o n P r o c e s s i n g F i l t e r . d o F i l t e r ( A b s t r a c t A u t h e n t i c a t i o n P r o c e s s i n g F i l t e r . j a v a : 2 2 1 ) < b r   / >         a t   o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . F i l t e r C h a i n P r o x y $ V i r t u a l F i l t e r C h a i n . d o F i l t e r ( F i l t e r C h a i n P r o x y . j a v a : 3 7 4 ) < b r   / >         a t   o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . a u t h e n t i c a t i o n . l o g o u t . L o g o u t F i l t e r . d o F i l t e r ( L o g o u t F i l t e r . j a v a : 1 0 7)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82)
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195)
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
Некоторое время пытался разобраться в этом, и кажется, что многие другие ответы, относящиеся к этой теме в SO, устарели и мало пригодились для моей ситуации.< /p>
Кто-нибудь смог это понять?

Подробнее здесь: https://stackoverflow.com/questions/783 ... ing-called
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»