2016-05-12 4 views
0

Я знаю, что это n. сообщение о Spring Security, и я много читал об этом, пока не решил опубликовать свой вопрос, потому что, я полагаю, из-за природы Spring Boot должна быть какая-то проблема, скрытая под капотом, что характерно для созвездие версии загрузки/типа безопасности, которую я использую.Spring Boot 1.3.3., Spring Security basic custom config

Позвольте мне прямо в него.

pom.xml:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-data-jpa</artifactId> 
</dependency> 

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-jersey</artifactId> 
</dependency> 

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency> 

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-security</artifactId> 
    <version>1.2.5.RELEASE</version> 
</dependency> 

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-test</artifactId> 
    <scope>test</scope> 
</dependency> 

Моей основная Security Config:

@Configuration 
@EnableWebSecurity 
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private UserDetailsService userDetailsService; 

    @Autowired 
    private StudentRepository studentRepository; 

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

    http.csrf().disable() 
     .authorizeRequests() 
      .antMatchers("/").access("hasRole('ROLE_STUDENT')") 
      .antMatchers("/**").permitAll(); 
     .and() 
      .formLogin() 
      .loginPage("/login") 
      .failureUrl("/login?error=true"); 
    } 

    @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
     .userDetailsService(new UserDetailsService() { 
      @Override 
      public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
       Iterable<Student> studentsWithIds = studentRepository.findAll(); 

       for (Student student: studentsWithIds) { 
        if (student.getName() == username) { 
         return studentRepository.findOne(student.getId()); 
        } 
       } 
        throw new UsernameNotFoundException("User '" + username + "' not found."); 
      } 
     });  
    } 
} 

Мой класс Student реализует UserDetails (с. Зашитыми учетными данными для сакэ роли простоты является ROLE_STUDENT):

@Entity 
public class Student implements UserDetails { 

    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer id; 

    @Column(unique=true) 
    private Integer facebookId; 

    @Column(unique=true) 
    private Integer googleId; 

    private String name = ""; 
    private String password = ""; 


    public void setName(String name) { 
     this.name = name; 
    } 


    public String getName() { 
     return this.name; 
    } 

    public String getPassword() { 
     return this.password; 
    } 

    public void initialize(String studentName) { 
     this.name = "student1"; 
     this.password = "password"; 
    } 

    @Override 
    public String toString(){ 
     return "Student with name " + name + "id: " + id; 
    } 

    public Integer getId() { 
     return id; 
    } 

    @Override 
    public Collection<? extends GrantedAuthority> getAuthorities() { 
     return Arrays.asList(new SimpleGrantedAuthority("ROLE_STUDENT")); 
    } 

    @Override 
    public String getUsername() { 
     return this.name; 
    } 

    @Override 
    public boolean isAccountNonExpired() { 
     // TODO Auto-generated method stub 
     return true; 
    } 

    @Override 
    public boolean isAccountNonLocked() { 
     // TODO Auto-generated method stub 
     return true; 
    } 

    @Override 
    public boolean isCredentialsNonExpired() { 
     // TODO Auto-generated method stub 
     return true; 
    } 

    @Override 
    public boolean isEnabled() { 
     // TODO Auto-generated method stub 
     return true; 
    } 

} 

Все. У меня нет никакой другой связанной с безопасностью конфигурации и аннотации, и, насколько я знаю, мне больше нечего делать.

Проблема в том, что при запуске приложения я все еще не могу аутентифицироваться самостоятельно с помощью «student1»/«password», но только с по умолчанию «пользователь» /.

Любая идея, что не хватает, пожалуйста? Спасибо!

Naturally there is a user already in the database После отладочный режим превратился в:

22: 06: 54.067 [HTTP-NiO-8280-ехес-1] DEBUG osswaAnonymousAuthenticationFilter - Населенные SecurityContextHolder с анонимным маркером: «org.springframework.security .authentication.AnonymousAuthenticationToken @ 9055c2bc: Principal: anonymousUser; Учетные данные: [ЗАЩИТА]; Authenticated: true; Подробности: org.sprin[email protected]b364: RemoteIpAddress: 0: 0: 0: 0: 0: 0: 0: 1; SessionId: null; Предоставленные полномочия: ROLE_ANONYMOUS ' 22: 06: 54.067 [http-nio-8280-exec-1] DEBUG org.springframework.security.web.FilterChainProxy -/students/1 в позиции 9 из 11 в дополнительной цепочке фильтров; firing Filter: 'SessionManagementFilter' 22: 06: 54.067 [http-nio-8280-exec-1] DEBUG org.springframework.security.web.FilterChainProxy -/students/1 в позиции 10 из 11 в дополнительной цепочке фильтров; firing Filter: 'ExceptionTranslationFilter' 22: 06: 54.067 [http-nio-8280-exec-1] DEBUG org.springframework.security.web.FilterChainProxy -/students/1 в позиции 11 из 11 в дополнительной цепочке фильтров; firing Filter: 'FilterSecurityInterceptor' 22: 06: 54.068 [http-nio-8280-exec-1] DEBUG o.s.s.w.access.intercept.FilterSecurityInterceptor - Защищенный объект: FilterInvocation: URL:/students/1; Атрибуты: [hasAnyRole ('ROLE_USER')] 22: 06: 54.068 [http-nio-8280-exec-1] DEBUG osswaccess.intercept.FilterSecurityInterceptor - ранее прошедший проверку: org.sprin[email protected]9055c2bc: Руководитель: anonymousUser; Учетные данные: [ЗАЩИТА]; Authenticated: true; Подробности: org.sprin[email protected]b364: RemoteIpAddress: 0: 0: 0: 0: 0: 0: 0: 1; SessionId: null; Предоставленные полномочия: ROLE_ANONYMOUS 22: 06: 54.072 [http-nio-8280-exec-1] DEBUG ossecurity.access.vote.AffirmativeBased - Избиратель: org.sp[email protected]272de199, возвращено : -1 22: 06: 54.072 [http-nio-8280-exec-1] DEBUG osbfactory.support.DefaultListableBeanFactory - Возвращает кешированный экземпляр singleton bean 'delegatingApplicationListener' 22: 06: 54.073 [http-nio-8280- exec-1] DEBUG ossecurity.web.access.ExceptionTranslationFilter - доступ запрещен (пользователь анонимный); перенаправление на точку входа аутентификации org.springframework.security.access.AccessDeniedException: доступ запрещен по адресу org.springframework.security.access.vote.AffirmativeBased.decide (AffirmativeBased.java:83) at org.springframework.security.access .intercept.AbstractSecurityInterceptor.beforeInvocation (AbstractSecurityInterceptor.java:232) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke (FilterSecurityInterceptor.java:123) at org.springframework.security.web.access.intercept .FilterSecurityInterceptor.doFilter (FilterSecurityInterceptor.java:90) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:330) в org.springframework.security.web.access.ExceptionTranslationFilter.doF МСДЭНИ (ExceptionTranslationFilter.java:114) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:330) в org.springframework.security.web.session.SessionManagementFilter.doFilter (SessionManagementFilter.java: 122) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:330) в org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter (AnonymousAuthenticationFilter.java:111) в орг. springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:330) в org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter (SecurityContextHolderAwareRequestFilter.java:169) в org.springfr amework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:330) в org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter (RequestCacheAwareFilter.java:48) в org.springframework.security.web. FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:330) в org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal (BasicAuthenticationFilter.java:158) в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) at org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:330) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter (LogoutFilter.java: 120) at org.spring framework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:330) на org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal (HeaderWriterFilter.java:64) на org.springframework.web.filter. OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:330) в org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter (SecurityContextPersistenceFilter. Java: 91) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:330) в org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal (WebAsyncManagerIntegrationFilter.java: 53) в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:330) в org.springframework.security. web.FilterChainProxy.doFilterInternal (FilterChainProxy.java:213) на org.springframework.security.web.FilterChainProxy.doFilter (FilterChainProxy.java:176) на org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate (DelegatingFilterProxy.java: 346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter (DelegatingFilterProxy.java:262) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.Java: 240) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:207) на org.springframework.web.filter.RequestContextFilter.doFilterInternal (RequestContextFilter.java:99) на org.springframework. web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:240) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain. Java: 207) на org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal (HttpPutFormContentFilter.java:87) на org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) на org.apache. catalina.core.Applicati onFilterChain.internalDoFilter (ApplicationFilterChain.java:240) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:207) на org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal (HiddenHttpMethodFilter.java:77) на org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:240) на org.apache.catalina.core. ApplicationFilterChain.doFilter (ApplicationFilterChain.java:207) на org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:121) в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:240) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:207) на org.apache.catalina.core. StandardWrapperValve.invoke (StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:502) на org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:141) на org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:79) на org.apache.catalina.core. СтандартноеEngineValve.invoke (StandardEngineValve.java:88) at org.apache .catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:522) at org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1095) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol .java: 672) at org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1500) at org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run (NioEndpoint.java : 1456) at java.util.concurrent.ThreadPoolExecutor.runWorker (Неизвестный источник) at java.util.concurrent.ThreadPoolExecutor $ Worker.run (Неизвестный источник) на org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable .run (TaskThread.java:61) at java.lang.Thread.run (Неизвестный источник) 22: 06: 5 4.073 [http-nio-8280-exec-1] DEBUG o.s.ececurity.web.access.ExceptionTranslationFilter - Вызов точки входа для проверки подлинности. 22: 06: 54.073 [http-nio-8280-exec-1] DEBUG ossweb.context.SecurityContextPersistenceFilter - SecurityContextHolder теперь очищен, по завершении обработки запроса 22: 06: 54.073 [http-nio-8280-exec-1] DEBUG osboot.context.web.OrderedRequestContextFilter - очищенный контекст запроса потока: [email protected] 22: 06: 54.077 [http-nio-8280-exec-1] DEBUG org.springframework. web.servlet.DispatcherServlet - DispatcherServlet с обработкой имени «dispatcherServlet» Запрос GET для [/ error] 22: 06: 54.080 [http-nio-8280-exec-1] DEBUG oswsmmaRequestMappingHandlerMapping - Поиск метода обработчика пути/ошибки 22: 06: 54.083 [http-nio-8280-exec-1] DEBUG oswsmmaRequestMappingHandlerMapping - метод возвращаемого обработчика [public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)] 22: 06: 54.083 [http-nio-8280-exec-1] DEBUG osbfactory.support.DefaultListableBeanFactory - Возвращает кешированный экземпляр singleton bean 'basicErrorController' 22: 06: 54.084 [http-nio-8280-exec-1] DEBUG org .springframework.web.servlet.DispatcherServlet - Последнее исправленное значение для [/ error]: -1 22: 06: 54.084 [http-nio-8280-exec-1] DEBUG osojsupport.OpenEntityManagerInViewInterceptor - открытие JPA EntityManager в OpenEntityManagerInViewInterceptor 22: 06: 54.104 [http-nio-8280-exec-1] DEBUG oswservlet.view.ContentNegotiatingViewResolver - запрошенные типы медиа - это [text/html, text/html; q = 0.8] на основе Принимать типы заголовков и типы носителей типа [text/html]) 22: 06: 54.104 [http-nio-8280-exec-1] DEBUG osbfactory.support.DefaultListableBeanFactory - Возвращает кешированный экземпляр одноэлементного бина 'error' 22: 06: 54.107 [http-nio-8280-exec-1] DEBUG osbfactory.support.DefaultListableBeanFactory - вызов afterPropertiesSet() в bean-компоненте с именем 'error' 22: 06: 54.107 [http-nio-8280-exec-1] DEBUG oswservlet.view.ContentNegotiatingViewResolver - Возврат [org.springfram[email protected]2fb1fefe] на основе запрошенного типа носителя 'text/html' 22: 06: 54.107 [http-nio-8280-exec -1] DEBUG org.springframework.web.servlet.DispatcherServlet - просмотр рендеринга [org.springfram[email protected]2fb1fefe] в DispatcherServlet с именем 'dispatcherServlet' 2 2: 06: 54.113 [http-nio-8280-exec-1] DEBUG osojsupport.OpenEntityManagerInViewInterceptor - Закрытие JPA EntityManager в OpenEntityManagerInViewInterceptor 22: 06: 54.113 [http-nio-8280-exec-1] DEBUG osorm.jpa. EntityManagerFactoryUtils - Закрытие JPA EntityManager 22: 06: 54.113 [http-nio-8280-exec-1] DEBUG org.springframework.web.servlet.DispatcherServlet - успешно завершенный запрос 22: 06: 54.114 [http-nio-8280-exec -1] DEBUG osbfactory.support.DefaultListableBeanFactory - Возвращает кешированный экземпляр singleton bean 'delegatingApplicationListener' 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG osboot.context.web.OrderedRequestContextFilter - Связанный контекст запроса to thread: [email protected] 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG ossweb.util.matcher.AntPathRequestMatcher - контрольный мат ch запроса: '/ students/1'; против '/ css/' 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG o.s.s.web.util.matcher.AntPathRequestMatcher - проверка соответствия запроса: '/ students/1'; против '/ js/' 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG o.s.s.web.util.matcher.AntPathRequestMatcher - проверка соответствия запроса: '/ students/1'; против '/ images/' 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG o.s.s.web.util.matcher.AntPathRequestMatcher - проверка соответствия запроса: '/ students/1'; против '/ /favicon.ico' 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG o.s.s.web.util.matcher.AntPathRequestMatcher - проверка соответствия запроса: '/ students/1'; против '/ error' 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG ossecurity.web.util.matcher.OrRequestMatcher - попытка сопоставления с использованием Ant [pattern = '/ '] 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG ossweb.util.matcher.AntPathRequestMatcher - запрос '/ students/1', соответствующий универсальному шаблону '/' 22: 07: 02.728 [http-nio- 8280-exec-2] DEBUG ossecurity.web.util.matcher.OrRequestMatcher - соответствует 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG org.springframework.security.web.FilterChainProxy -/students/1 в позиции 1 из 11 в дополнительной цепи фильтра; firing Filter: 'WebAsyncManagerIntegrationFilter' 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG org.springframework.security.web.FilterChainProxy -/students/1 в позиции 2 из 11 в дополнительной цепочке фильтров; firing Filter: 'SecurityContextPersistenceFilter' 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG org.springframework.security.web.FilterChainProxy -/students/1 в позиции 3 из 11 в дополнительной цепочке фильтров; firing Filter: 'HeaderWriterFilter' 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG ossecurity.web.header.writers.HstsHeaderWriter - Не вводить заголовок HSTS, так как он не соответствует запросу request.matcher org.springframework. se[email protected]37ca7e0d 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG org.springframework.security.web.FilterChainProxy -/students/1 в позиции 4 из 11 в дополнительной цепи фильтра; firing Filter: 'LogoutFilter' 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG o.s.s.web.util.matcher.AntPathRequestMatcher - проверка соответствия запроса: '/ students/1'; против '/ logout' 22: 07: 02.728 [http-nio-8280-exec-2] DEBUG org.springframework.security.web.FilterChainProxy -/students/1 в позиции 5 из 11 в дополнительной цепочке фильтров; firing Filter: 'BasicAuthenticationFilter' 22: 07: 02.730 [http-nio-8280-exec-2] DEBUG osswawww.BasicAuthenticationFilter - базовый заголовок авторизации аутентификации, найденный для пользователя 'student1' 22: 07: 02.730 [http-nio- 8280-exec-2] DEBUG ossecurity.authentication.ProviderManager - попытка аутентификации с использованием org.springframework.security.authentication.dao.DaoAuthenticationProvider 22: 07: 02.731 [http-nio-8280-exec-2] DEBUG ossauthentication.dao .DaoAuthenticationProvider - Пользователь «student1» не найден

самого конца, кажется, самым интересным, хотя остальные довольно некрасиво тоже:

ossauthentication.dao.DaoAuthenticationProvider - «student1» Пользователь не найден

Вот где я назвал инициализацию на студента (это обман, потому что он должен быть вызван на POST, но опять же, я изменяла только поместить ученика в базу данных и использовать его для аутентификации. Впоследствии это было бы очевидно иначе. Конечно, я мог только сделать это GET, когда я temporarely деактивируется безопасности на приложение):

@RequestMapping(value="/students", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_UTF8_VALUE) 
public ResponseEntity<Iterable<Student>> listStudents() { 
    LOGGER.info("/students controller method call"+new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date())); 
    Iterable<Student> studentsFound = studentRepository.findAll(); 

    Student newStudent = new Student(); 
    newStudent.initialize("student1"); 
    studentRepository.save(newStudent); 

    return new ResponseEntity<Iterable<Student>>(studentsFound, HttpStatus.OK);   
} 

Как вы думаете, сам экземпляр Student как-то не правильно?

+0

Где вы называете 'initialize' метод' Student'? –

+0

добавлена ​​часть инициализации. расширенное с некоторым объяснением (я знаю, что это не имеет смысла там, но просто хотел сохранить Student в БД, где бы то ни было. Эта часть уже работала без auth, поэтому я ее там поместил. БД находится в режиме обновления , запись, безусловно, все еще находится в БД, но я тоже дважды проверял ее) – Andrel

ответ

2

Проблема заключается в том, что, когда я запустить приложение, я до сих пор не может аутентифицировать себя с «student1»/«пароль», но только с «пользователь»/ по умолчанию.

Это означает, что пользователь по умолчанию (настроенный по умолчанию AuthenticationManager) по-прежнему включен. Для того, чтобы решить эту проблему, просто InjectAuthenticationManagerBuilder к configure метода:

@Override 
@Autowired 
protected void configure(AuthenticationManagerBuilder auth) throws Exception { ... } 

На основе Spring boot documentation:

Чтобы также отключить конфигурацию менеджера аутентификации можно добавить боб введите AuthenticationManager или еще настроить глобальный AuthenticationManager путем автоподвешивания AuthenticationManagerBuilder в метод в одном из ваших @Configuration классы.

Итак, для того, чтобы отключить по умолчанию AuthenticationManager, вы должны AutowireAuthenticationManagerBuilder к способу конфигурации.

Я знаю, что это не по теме, но следующий фрагмент кода, кажется, крайне неэффективно для меня:

Iterable<Student> studentsWithIds = studentRepository.findAll(); 
for (Student student: studentsWithIds) { 
    if (student.getName() == username) { 
     return studentRepository.findOne(student.getId()); 
    } 
} 
+1

объяснение того, почему он должен вводить AuthenticationManagerBuilder, вероятно, помог бы понять, почему у него возникла проблема – Turtle

+0

@Turtle Обновлен ответ, спасибо за предложение –

+0

Спасибо, я попробовал ваше предложение, но просто добавив @Autowired для защиты void configure (AuthenticationManagerBuilder auth) throw Exception {...} ничего не изменил. Что-то еще отключено. (да, это, вероятно, не последняя версия, как я собираюсь получить пользователя из базы данных, я так отчаялся в этой точке, что я не против быстрых и грязных вещей, подобных этому на данный момент). Странная вещь в том, что я не думаю, что выполнение даже доходит до этого метода configure, потому что, по крайней мере, я должен увидеть исключение UsernameNotFoundException, не так ли? – Andrel

Смежные вопросы