-2

Мой код в XML конфигурации:Добавить поставщика аутентификации Spring Security Java конфигурации

<authentication-manager alias="authenticationManager"> 
    <authentication-provider ref="customAuthenticationProvider" /> 
</authentication-manager> 

работал отлично, но я не могу перевести на Java код.

Ошибка:

java.lang.NullPointerException 
org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:164) 
org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:199) 
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:94) 
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:121) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66) 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) 
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) 

WebSecurityConfiguration:

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { 

    // @Autowired 
    private CustomAuthenticationProvider customAuthenticationProvider; 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
       .authenticationProvider(customAuthenticationProvider); // .build() 
    } 

    @Override 
    public void configure(WebSecurity web) throws Exception { 
     web 
       .ignoring() 
       .antMatchers("/resources/**") 
       .antMatchers("/assets/**"); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
     //  .authenticationProvider(customAuthenticationProvider) 
       .authorizeRequests() 
        .antMatchers("/login","/logout").permitAll().antMatchers("/admin/**", "/admin*").hasRole("ADMIN").antMatchers("/**").hasRole("USER") 
        .anyRequest().authenticated() 
        .and() 
       .formLogin() 
        .loginPage("/login") 
        .usernameParameter("username").passwordParameter("password") 
        .defaultSuccessUrl("/") 
        .permitAll() 
        .and() 
        .exceptionHandling().accessDeniedPage("/Access_Denied") 
        .and() 
       .logout() 
        .permitAll(); 

     http.csrf().disable(); 
    } 

    // @Bean 
    // DefaultWebSecurityExpressionHandler defaultWebSecurityExpressionHandler() { 
    //  return new DefaultWebSecurityExpressionHandler(); 
    // } 
} 

CustomAuthenticationProvider:

// @Component 
public class CustomAuthenticationProvider implements AuthenticationProvider { 
    private final CustomUserDetailsService userDetailsService; 

    @Autowired 
    public CustomAuthenticationProvider(CustomUserDetailsService userDetailsService) { 
     this.userDetailsService = userDetailsService; 
    } 

    @Override 
    public Authentication authenticate(Authentication authentication) throws AuthenticationException { 
     String username = authentication.getName().toLowerCase(); 
     String password = (String) authentication.getCredentials(); 

     userDetailsService.setPassword(password); 
     User user = userDetailsService.loadUserByUsername(username); 

     if (user == null) { 
      throw new BadCredentialsException("Username not found."); 
     } 

     if (!password.equals(user.getPassword())) { 
      throw new BadCredentialsException("Wrong password."); 
     } 

     userDetailsService.setAuthorized(username); 

     Collection<?extends GrantedAuthority> authorities = user.getAuthorities(); 

     return new UsernamePasswordAuthenticationToken(user, password, authorities); 
    } 

    @Override 
    public boolean supports(Class<?> aClass) { 
     return true; 
    } 
} 
+1

Код, который вы отправили, не имеет возможности получить экземпляр 'CustomAuthenticationProvider'. Поэтому вы должны создавать его где-то в качестве управляемого компонента, не связанного с весной. Опубликуйте фактический код вместо настройки. –

+0

M. Deinum Я показал код! –

ответ

-1

Если вы используете загрузку пружины можно сделать

@configuration 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{ 

@Override 
    protected void configure(final AuthenticationManagerBuilder auth) throws Exception { 
     auth.authenticationProvider(customAuthenticationProvider()); 
    } 

//customAuthenticationProvider() method creates your bean 

} 

// редактирование после добавленного кода

Хорошо, так что проблема заключается не в установке поставщика auth, а в вашем собственном коде. NPE показывает, что что-то не инициализируется в вашей пользовательской реализации. Правильно ли предоставлено автоустройство, есть ли у него все отпечатки? См. What is a NullPointerException, and how do I fix it?

+1

Я не использую Spring Boot! –

+1

Не имеет значения, ваша проблема - это NPE, а не конфигурация пружины. – Nadir

+0

Хорошее решение. Я надеялся, что это сработает для меня, но, к сожалению, это не так. Моя конфигурация загружается после создания ProviderManager, который устанавливает список поставщиков ... поэтому моя конфигурация игнорируется ... Как вы решили/достигли этого? –

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

  • Нет связанных вопросов^_^