Вопрос:
Я пытаюсь использовать базу данных 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 с учетом регистра?