2014-03-24 3 views
19

Как определить пользовательский поставщик аутентификации с помощью Spring Security с конфигурациями Java? Я хотел бы выполнить учетные данные для входа в мою собственную базу данных.Поставщик пользовательской аутентификации с функцией Spring Security и Java Config

+0

весенняя документация по безопасности дает вам всю необходимую информацию - как настроить конфигурацию XML и конечных точек. Кроме того, вам необходимо будет поддерживать потоки, такие как «создать учетную запись», «забыли пароль» и т. Д., Которые вы можете использовать с открытым исходным кодом: https://github.com/OhadR/oAuth2-sample/tree/master/ аутентификационные потоки – OhadR

ответ

40

Следующая делает то, что вам нужно (CustomAuthenticationProvider ваша реализация, которая должна управляться весной)

@Configuration 
@EnableWebMvcSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private CustomAuthenticationProvider customAuthenticationProvider; 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     /** 
     * Do your stuff here 
     */ 
    } 

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

Возможно ли зарегистрировать собственный поставщик аутентификации в дополнение к уже существующим? –

+0

@Seppl Я не думаю, что что-то вроде этого существует из коробки (хотя я мог легко ошибаться), но я почти уверен, что что-то подобное можно реализовать относительно легко. Проверьте [this] (http://stackoverflow.com/a/36417101/2504224) – geoand

+1

В соответствии с Spring Docu, 'auth.authenticationProvider()' будет 'Добавить аутентификацию на основе настраиваемого AuthenticationProvider, который передается. " Я предполагаю, что вы получите стек провайдеров таким образом. –

4

Как показано на baeldung.com, определите поставщика проверки подлинности следующим образом:

@Component 
public class CustomAuthenticationProvider implements AuthenticationProvider { 

    @Override 
    public Authentication authenticate(Authentication authentication) 
     throws AuthenticationException { 

     String name = authentication.getName(); 
     String password = authentication.getCredentials().toString(); 

     if (shouldAuthenticateAgainstThirdPartySystem(username, password)) { 

      // use the credentials 
      // and authenticate against the third-party system 
      return new UsernamePasswordAuthenticationToken(
       name, password, new ArrayList<>()); 
     } else { 
      return null; 
     } 
    } 

    @Override 
    public boolean supports(Class<?> authentication) { 
     return authentication.equals(
      UsernamePasswordAuthenticationToken.class); 
    } 
} 

и следующий код соответствует java config:

@Configuration 
@EnableWebSecurity 
@ComponentScan("org.project.security") 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private CustomAuthenticationProvider authProvider; 

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

     auth.authenticationProvider(authProvider); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().anyRequest().authenticated() 
      .and() 
      .httpBasic(); 
    } 
} 
+1

Вы просто скопировали это прямо из http://www.baeldung.com/spring-security-authentication-provider. Хотя ответ, безусловно, полезен, необходимо также указать источники. – moritz

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