2017-03-09 3 views
-1

ich ein Neuling mit Feder Sicherheit bin, und ich habe eine grundlegende auth für meine Feder Boot-Anwendung erstellt, um es auszuprobierenFrühling Boot-Basis Authentifizierung Benutzername wird nicht validiert

Ich habe MYGlobalAuthenticationConfigurerAdapter wie folgt erstellt:

@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")); 
      } 
     }; 
    } 

beachten Sie, dass ich Benutzername und Passwort von Eigenschaften laden Datei und ich validieren gegen Werte

und MyWebSecurityConfigurerAdapter wie folgt aus:

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

mit einer @EnableWebSecurity Annotation.

Ich versuche Postbote zu einem meiner Web-Services mit Benutzername und Passwort jedes Mal, wenn ich Benutzernamen der Anfrage bestätigt wird, selbst ändern zu verbinden, wenn der Benutzername nicht die gleiche wie die, die ich meine Eigenschaften

setzen in

Antwort

1

Diese Datei liegt daran, dass Sie das Benutzerobjekt in jedem Fall ohne Überprüfung mit dem in argument empfangenen zurückgeben. Versuchen Sie folgenden Code ein:

@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 + "'"); 
      } 

     } 
    }; 
} 

UPDATE

Benutzer wird nicht durch irgendein Passwort bestätigt werden, aber nur mit Passwort, das Sie in der Benutzererstellung verwenden innerhalb loadUserByUsername() -Methode. Bei dieser Methode finden Sie den Benutzer nur nach Benutzername und Rückgabe, die Authentifizierung wird hier nicht durchgeführt, aber die Authentifizierung erfolgt intern im Frühjahr und entspricht dem Passwort, das Sie beim Erstellen des Benutzers (und Rückgabe) mit dem von Ihnen übergebenen Passwort erhalten haben anfordern. Es überprüft auch die Rolle des Benutzers für die URL, auf die Sie zugreifen, und wenn die URL für eine bestimmte Rolle zugeordnet ist, erhält der Benutzer mit dieser Rolle Zugriff, für jede andere Rolle sendet er Zugriff verweigert. Also, es wird Benutzer mit keinem Passwort authentifizieren.

+0

können Sie auf meine Frage bitte @md zahid raza? https://stackoverflow.com/questions/46065063/spring-boot-basic-authentication –

Verwandte Themen