Ich habe versucht, eine Postgres-Datenbank für die Authentifizierung mit Spring-Sicherheit zu verwenden.Grund: PreparedStatementCallback; schlechte SQL-Grammatik
Dies ist meine SQL-Tabelle Definition:
CREATE TABLE "UTILISATEUR" (
"IdUtilisateur" serial NOT NULL,
"Nom" character varying(50),
"Prenom" character varying(50),
"Profil" character varying(50),
"Pseudo" character varying(20),
"IdSite" integer DEFAULT 0,
"Password" character varying(1024),
role character varying(45),
CONSTRAINT "UTILISATEUR_pkey" PRIMARY KEY ("IdUtilisateur"),
CONSTRAINT fk1u FOREIGN KEY (role)
REFERENCES "Role" (role) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
Und hier ist meine Konfigurationsklasse für den Frühling Sicherheit:
package com.ardia.MDValidation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import javax.sql.DataSource ;
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
//Pour l'authentification des Utilisateur de Table Utilisateur
@Autowired
public void GlobalConfig(AuthenticationManagerBuilder auth,DataSource dataSource) throws Exception {
auth.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery("select Pseudo as principal , Password as credentials from UTILISATEUR where Pseudo = ? ")
.authoritiesByUsernameQuery("select Pseudo as principal , role as role from UTILISATEUR where Pseudo = ? ")
.rolePrefix("_ROLE");
}
//ne pas appliqué la securité sur les ressources
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.antMatchers("/bootstrap/css/**","/css/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin()
.permitAll();
}
}
Es verwendet, um mit Benutzern im Speicher zu arbeiten. Jetzt kann ich es nicht schaffen, weil SQL-Grammatik. Oder sollte ich den Tabellennamen ändern, weil in dem Fehler der Benutzername Kleinbuchstaben ist und mein Tabellenname Großbuchstaben ist?
Hier ist der Fehler:
org.postgresql.util.PSQLException: ERREUR: la relation « utilisateur » n'existe pas Position : 32
Ich fand das Problem
Es scheint, wenn Sie eine Abfrage ausführen mit jdbcAuthentication()
es Spalten- und Tabellennamen zwingt Fall zu senken. Kann jemand das ändern?
Sie Kapitalien nicht in Utilisateur verwenden. SQL ** ist ** unabhängig von Groß- und Kleinschreibung, aber Ihr Framework * kann * Bezeichner angeben, wodurch der SQL-Parser gezwungen wird, Groß- und Kleinschreibung zu beachten. Kurz gesagt: Verwenden Sie keine Großbuchstaben. – joop
Aber ich kann den Datenbanknamen nicht ändern, es ist ein Projekt, wo ich die Datenbank nicht anfassen kann, nur wie es ist :( –
@joop: Rechtliche, kleingeschriebene, nicht angebene Identifikatoren helfen, solche Komplikationen zu vermeiden. Ihr Rat ist gut , nur die Erklärung ist rückwärts. [Bezeichner in SQL sind tatsächlich * Groß- und Kleinschreibung *.] (http://stackoverflow.com/a/20880247/939860) Namen werden in Postgres nur auf Kleinbuchstaben gefaltet. Fall in Standard-SQL) –