2017-03-09 1 views
-1

Je suis un débutant avec la sécurité du printemps et je l'ai créé une auth de base pour mon application de démarrage de printemps pour essayerboot Spring nom d'utilisateur auth de base n'est pas validé

J'ai créé MYGlobalAuthenticationConfigurerAdapter comme ceci:

@Value("${username}") 
    String username; 

    @Value("${password}") 
    String password; 

    @Override 
    public void init(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(userDetailsService()); 
    } 

    @Bean 
    public UserDetailsService userDetailsService() { 
     return new UserDetailsService() { 

      @Override 
      public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
       return new User(username, password, true, true, true, true, 
         AuthorityUtils.createAuthorityList("USER")); 
      } 
     }; 
    } 

Notez que je charge le nom d'utilisateur et mot de passe de fichier de propriétés et je valider par rapport aux valeurs

et MyWebSecurityConfigurerAdapter comme ceci:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http.authorizeRequests().anyRequest().fullyAuthenticated().and(). 
    httpBasic().and(). 
    csrf().disable(); 
} 

avec une annotation @EnableWebSecurity.

J'essaie postier de se connecter à l'un de mes services Web avec nom d'utilisateur et mot de passe chaque fois que je change le nom d'utilisateur la demande est validée même si le nom d'utilisateur est pas le même que celui que je mets dans mes fichier de propriétés

Répondre

1

Cette est parce que vous retournez l'objet Utilisateur dans tous les cas sans vérification avec celui reçu en argument. Essayez le code suivant:

@Value("${username}") 
    String username; 

    @Value("${password}") 
    String password; 

    @Override 
    public void init(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(userDetailsService()); 
    } 

    @Bean 
public UserDetailsService userDetailsService() { 
    return new UserDetailsService() { 

     @Override 
     public UserDetails loadUserByUsername(String name) throws UsernameNotFoundException { 
      if(name.equals(username)){ 
       return new User(username, password, true, true, true, true, 
        AuthorityUtils.createAuthorityList("USER")); 
      }else{ 
       throw new UsernameNotFoundException("Could not find the user '" + name + "'"); 
      } 

     } 
    }; 
} 

MISE À JOUR

utilisateur ne sera pas validée par un mot de passe, mais avec seulement un mot de passe que vous utilisez dans la création de l'utilisateur à l'intérieur de la méthode loadUserByUsername(). Dans cette méthode, vous ne trouvez l'utilisateur que par nom d'utilisateur et retour, l'authentification n'est pas effectuée ici, mais l'authentification est effectuée en interne et correspond au mot de passe que vous avez passé lors de la création de l'utilisateur avec le mot de passe que vous avez passé. demande. Il vérifie également le rôle de l'utilisateur pour l'URL à laquelle vous accédez et si l'URL est mappée pour un rôle spécifique, l'utilisateur ayant ce rôle a un accès, pour tout autre rôle, il enverra une réponse d'accès refusé. Donc, il ne va pas authentifier l'utilisateur avec un mot de passe.

+0

pouvez-vous regarder ma question s'il vous plaît @md zahid raza? https://stackoverflow.com/questions/46065063/spring-boot-basic-authentication –