Причина: PreparedStatementCallback; плохая грамматика SQL

Вопрос:Я пытаюсь использовать базу данных Postgres для проверки подлинности с помощью Spring. Это мое определение таблицы SQL: 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

Вопрос:

Я пытаюсь использовать базу данных Postgres для проверки подлинности с помощью Spring.

Это мое определение таблицы SQL:

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 );

И вот мой класс конфигурации для безопасности Spring:

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(); } }

Он работал с пользователями памяти. Теперь я не могу заставить его работать, потому что грамматика SQL. Или мне нужно изменить имя таблицы, потому что в ошибке имя пользователя имеет нижний регистр, а мое имя таблицы – в верхнем регистре?

Здесь ошибка:

org.postgresql.util.PSQLException: ERREUR: la relation « utilisateur » n’existe pas Position : 32

Я нашел проблему

Кажется, что когда вы выполняете запрос с jdbcAuthentication(), он заставляет имена столбцов и таблиц в нижнем регистре. Кто-нибудь знает, как изменить это?

Лучший ответ:

Тот, кто создал вашу таблицу, решил сохранить идентификаторы CAMeL-case с двойными кавычками. Теперь вам нужно использовать совпадающие имена таблиц и столбцов case и double-quote.

Так как двойные кавычки имеют особый смысл в вашем клиенте, вам нужно избегать или кодировать специальный символ. Я не знаком с Spring. Может быть, побег с обратной косой чертой?

«SELECT «Pseudo» AS principal, «Password»; AS credentials FROM «UTILISATEUR» WHERE «Pseudo» = ? »

Etc.

по теме:

  • Являются ли имена столбцов PostgreSQL с учетом регистра?
Оцените статью
Добавить комментарий