2016-03-29 15 views
0

Ich habe ein Passwort-Feld in der Datenbank mit MD5 (Benutzername + Passwort). Wie würde ich dies in Spring Security + JdbcAuthentication implementieren. Ich weiß, dass dies keineswegs sicher ist, aber es ist eine Legacy-Datenbank, mit der ich sprechen muss. Mein aktueller Code sieht so aus:Spring Boot Security 4 benutzerdefinierte PasswordEncoder

Wenn ich den Hashwert als Passwort sende, funktioniert die Authentifizierung. Ich denke, ich müsste einen Passwort-Encoder konfigurieren.

+0

Um so viel von der Standardinfrastruktur für die Spring-Sicherheit zu verwenden, benötigen Sie eine 'SaltSource', um den' Benutzernamen' zu erhalten, der an das Passwort angehängt wird. Als nächstes würden Sie eine benutzerdefinierte Erweiterung für das 'MessageDigestPasswordEncoded' benötigen, um das Salt vor dem Passwort anzuhängen (standardmäßig ist 'password {salt}' anstelle Ihres Schemas. –

+0

Ich bin mit dem Hacky Weg gegangen und habe die Request Parameter in a ServletFilter, daher wird Benutzername + Passwort als Passwort an den md5-Encoder übergeben.Hatte einige Groß-/Kleinschreibungsprobleme, aber SQL hat das gelöst. Vielen Dank an alle. –

Antwort

-1

Sie sollten wie tun folgende

@Autowired 
public void configAuthentication(AuthenticationManagerBuilder auth) 
    throws Exception { 

    auth.jdbcAuthentication().dataSource(dataSource) 
     .passwordEncoder(passwordEncoder()) 
     .usersByUsernameQuery("sql...") 
     .authoritiesByUsernameQuery("sql..."); 
} 

@Bean 
public PasswordEncoder passwordEncoder(){ 
    PasswordEncoder encoder = new BCryptPasswordEncoder(); 
    return encoder; 
} 

seine Hilfe zu Ihnen Hoffnung.

0

Sie können die gesamte Authentifizierung in Ihre applicationContext.xlm wie folgt konfiguriert werden:

<sec:authentication-manager> 
     <sec:authentication-provider> 
      <sec:password-encoder ref="encoder" /> // And here is an encoder that will encode a password which comes from login form. 
      <sec:jdbc-user-service data-source-ref="dataSource" 
       users-by-username-query="your query" 
       authorities-by-username-query="your query for authentication table" /> 
     </sec:authentication-provider> 
    </sec:authentication-manager> 

Ich versuchte es heute in der Schule und es funktionierte für mich. Ich habe es am einfachsten gefunden, mein Autoritätsproblem zu lösen und hoffe, dass es auch für Sie eine passende Lösung sein wird.

PS. Sorry, ich bin mir nicht sicher, wie meine Antwort richtig angezeigt wird. War nur Leser hier für etwa ein Jahr und jetzt beschlossen, beizutreten und selbst einige Fragen zu schreiben

0

Ich bin mit dem Hacky Weg gegangen und schrieb die Request-Parameter in einem ServletFilter. Der Schlüssel hierfür war, einen benutzerdefinierten HttpServletRequestWrapper zu verwenden, um die Anforderung ändern zu können.

Jetzt Benutzername + Passwort als Passwort zum MD5-Encoder übergeben. Hatte einige Groß-/Kleinschreibung Probleme, aber die Anpassung von SQL hat dies gelöst.

Verwandte Themen