Comment définir un point D'authentification personnalisé sans configuration XML

je lutte depuis quelques jours maintenant. Je suis un peu nouveau dans Spring Boot, et j'aime l'idée de ne pas utiliser la configuration XML.

j'ai créé une application RESTfull (avec JSON). Je suis la suite ce tutoriel pour configurer l'authentification correctement.

je pense que j'ai réussi à reproduire presque toutes ses configurations en utilisant la configuration Java, sauf pour une chose - AuthenticationEntryPoint

Le tutoriel utilise une propriété http balise comme ceci et définit un formLogin de la façon suivante:

<http entry-point-ref="restAuthenticationEntryPoint">

  <intercept-url pattern="/api/admin/**" access="ROLE_ADMIN"/>

  <form-login
     authentication-success-handler-ref="mySuccessHandler"
     authentication-failure-handler-ref="myFailureHandler"
  />

  <logout />

</http>

AuthenticationEntryPoint explication Manuel de sécurité du printemps dit:

AuthenticationEntryPoint peut être défini en utilisant l'attribut entry-point-ref de l'élément .

ne mentionne rien sur la façon d'utiliser la Configuration Java.

alors comment puis-je" enregistrer " mon propre restAuthenticationEntryPoint sans XML afin d'empêcher la redirection vers un formulaire de connexion en utilisant formLogin<!--19?

ci-dessous, je vais mentionner ce que j'ai essayé.

Merci à tous.


dans mes tentatives, vous pouvez définirbasicAuth comme ceci:

@Configuration
@Order(1)                                                        
public static class RestWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {

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


        if (restAuthenticationEntryPoint == null) {
            restAuthenticationEntryPoint = new RestAuthenticationEntryPoint();
        }

        http
            .authorizeRequests()
                .antMatchers("/**").hasAnyRole(Sec.ADMIN,Sec.SUPER_USER)
...
        .and()
            .httpBasic()
                .authenticationEntryPoint(restAuthenticationEntryPoint)

mais j'utilise un login de formulaire comme celui-ci (sans le httpBasic):

        .and()
            .formLogin()
                .successHandler(mySavedRequestAwareAuthenticationSuccessHandler)
                .failureHandler(simpleUrlAuthenticationFailureHandler)

Le problème est qu'il redirige vers un formulaire de connexion quand il il ne reçoit pas de lettres de créance. Comme il s'agit d'un service de repos, il ne devrait pas.

documentationFormLoginConfigurer (la classe .formLogin() utilise) dit:

Objets Partagés Créés

Les objets partagés sont peuplées

AuthenticationEntryPoint

mais n'a pas pu trouver un moyen de l'annuler.

Des idées?

P.S.

Ne pense pas que ce serait une bonne idée de remplacer le formulaire de connexion à un programme personnalisé qui ne retourne l'erreur.

26
demandé sur informatik01 2014-07-10 23:32:02

1 réponses

la citation des documents de référence que vous avez fournis vous indique http.exceptionHandling(). Vous pouvez configurer l'partagé point d'entrée.

http.exceptionHandling().authenticationEntryPoint(myEntryPoint);
48
répondu Dave Syer 2014-07-11 07:07:38