Wie verwende ich die JDBC-Authentifizierung von Spring Security ohne Verwendung von "Berechtigungen"?


Marko

Ich habe ein Problem mit den Behörden.

Grund: PreparedStatementCallback; schlechte SQL-Grammatik [Benutzername auswählen, Autorität von Behörden, bei denen Benutzername =?]; verschachtelte Ausnahme ist org.postgresql.util.PSQLException: ERROR: Beziehung "Behörden" existiert nicht Position: 32

Ich möchte keine Berechtigungen implementieren, weiß aber nicht, wie ich sie in Spring in JavaConfig deaktivieren kann.

@Override
protected void configure(AuthenticationManagerBuilder auth)
        throws Exception {
    auth.jdbcAuthentication()
            .dataSource(dataSource)
            .usersByUsernameQuery(
                    "select username,password,'true' as enabled from users where username=?")
            .passwordEncoder(new ShaPasswordEncoder());
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().anyRequest().authenticated().and().formLogin().and().httpBasic();
}
ein anderer Knoten

Soweit ich weiß, können Sie den Berechtigungsmechanismus mit JavaConfig in Spring Security nicht deaktivieren, aber Sie können die Abfrage überschreiben, die zum Abrufen der Berechtigungsdaten verwendet wird, um den gleichen Effekt zu erzielen.

Bei Verwendung der JDBC-Authentifizierung von Spring Security werden bestimmte Annahmen zum Datenbankschema zum Abrufen von Authentifizierungsdaten getroffen. Sie überschreiben bereits die Abfrage, die zum Abrufen der Benutzerdaten in Ihrem Beispiel verwendet wurde, mit dem Aufruf von usersByUsernameQuery().

Ich habe es geschafft, die gesamte Berechtigungsprüfung effektiv zu deaktivieren, indem ich auch die Abfrage zum Abrufen von Berechtigungsdaten wie dieser überschrieben habe (wie in "Spring in Action" von Craig Walls beschrieben):

@Override
public void configure(AuthenticationManagerBuilder authenticationManagerBuilder)
        throws Exception {

    authenticationManagerBuilder.jdbcAuthentication().dataSource(dataSource)
            .usersByUsernameQuery(
                    "SELECT username, password, enabled FROM users WHERE username=?")
            .authoritiesByUsernameQuery(
                    "SELECT username, 'ROLE_USER' FROM users WHERE username=?");
}

Verwandte Artikel