2015-01-14 2 views
0

Я использую Spring Security 3.2.5. Пыльник мой класс настройки безопасности:Ошибка аутентификации при добавлении UsernamePasswordAuthenticationFilter


@Configuration 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
@EnableWebMvcSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private AuthenticationProvider ap; 
    @Autowired 
    private UsernamePasswordAuthenticationFilter myFilter; 


    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
      http.authorizeRequests() 
        .anyRequest().authenticated() 
        .and() 
        .formLogin() 
        .permitAll() 
        .and() 
      .httpBasic(); 
     http.addFilterAfter(myFilter, UsernamePasswordAuthenticationFilter.class); 
    } 

    @Autowired 
    public void configureGlobal(AuthenticationProvider ap, AuthenticationManagerBuilder amb) throws Exception { 
     amb.authenticationProvider(ap); 
    } 

} 

и вот некоторые из моих заявленных бобов:

@Bean 
public UsernamePasswordAuthenticationFilter restApiAuthenticationFilter() { 
    UsernamePasswordAuthenticationFilter filter = new UsernamePasswordAuthenticationFilter(); 
    filter.setAuthenticationManager(authenticationManager()); 
    filter.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher("/login", "POST")); 
    return filter; 
} 

@Bean 
public AuthenticationManager authenticationManager() { 
    List<AuthenticationProvider> providers = new LinkedList<AuthenticationProvider>(); 
    providers.add(daoAuthenticationProvider()); 
    ProviderManager pm = new ProviderManager(providers); 
    return pm; 
} 

Теперь проблема в том, что если добавить UsernamePasswordAuthenticationFilter к прыжку безопасности, то authenticatio не удается, в противном случае он идет Что ж. Любые рекомендации по этому вопросу? Я получаю это в лог-файлах:

2015-01-14 16: 03: 55548 [IO-8080-Exec-54] DEBUG ProviderManager - попытка аутентификации с использованием org.springframework.security.authentication.dao .DaoAuthenticationProvider

2015-01-14 16: 03: 55557 [IO-8080-Exec-54] DEBUG EntityManagerInvocationHandler - Создание нового EntityManager для общего EntityManager вызова

2015-01-14 16: 03: 55672 [ io-8080-exec-54] DEBUG EntityManagerFactoryUtils - Закрытие JPA EntityManager

2015-01-14 16: 03: 55772 [IO-8080-Exec-54] DEBUG DaoAuthenticationProvider - Пользователь '' не найден

+0

возможно дубликат [Добавление пользовательских UsernamePasswordAuthenticationFilter фильтра весной] (http://stackoverflow.com/questions/27938909/adding-custom-usernamepasswordauthenticationfilter-filter -in-spring) –

+0

@ M.Deinum Удал тот, с которым вы связались. Этот пост решает обе проблемы. – artaxerxe

ответ

0

Проблема была относительно моего имени пользователя и пароля параметров. Я объявил UsernamePasswordAuthenticationFilter боб, как это и проблема удалось решить:

@Bean 
public UsernamePasswordAuthenticationFilter restApiAuthenticationFilter() { 
    UsernamePasswordAuthenticationFilter filter = new UsernamePasswordAuthenticationFilter(); 
    filter.setAuthenticationManager(authenticationManager()); 
    filter.setUsernameParameter("username"); 
    filter.setPasswordParameter("password"); 
    filter.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher("/login", "POST")); 
    return filter; 
} 
+0

Почему вы просто не используете 'formLogin' для этого? В чем разница и зачем вам нужно 2 'UsernamePasswordAuthenticationFilter'. Ваша текущая конфигурация такая же, как и 'formLogin'. –

+0

Мне нужен пользовательский 'UsernamePasswordAuthenticaionFilter'. Просто попробовал это для упрощения. Спасибо. – artaxerxe

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