java 引入securityfilterchain配置后,无法配置数据源错误

nfs0ujit  于 2023-01-01  发布在  Java
关注(0)|答案(1)|浏览(190)

我设置了我的spring Boot 应用程序

@EnableJpaRepositories(...)
@EntityScan(...)

它运行良好,连接到数据库,创建表和检索数据所需的。
下一步我决定按照一个例子来介绍社交登录功能和添加配置:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .requestMatchers("/", "/login").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin().permitAll()
                .loginPage("/login")
                .usernameParameter("email")
                .passwordParameter("pass")
                .successHandler(databaseLoginSuccessHandler)
                .and()
                .oauth2Login()
                .loginPage("/login")
                .userInfoEndpoint()
                .userService(oauth2UserService)
                .and()
                .successHandler(oauthLoginSuccessHandler)
                .and()
                .logout().logoutSuccessUrl("/").permitAll()
                .and()
                .exceptionHandling().accessDeniedPage("/403");
        return http.build();
    }

    @Autowired
    private CustomOAuth2UserService oauth2UserService;

    @Autowired
    private OAuthLoginSuccessHandler oauthLoginSuccessHandler;

    @Autowired
    private DatabaseLoginSuccessHandler databaseLoginSuccessHandler;
}

它停止工作,出现错误:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class

应用程序.yaml提供:

spring:
  datasource:
    driver-class-name=org.postgresql.Driver
    url:jdbc:postgresql://localhost:5432/pennantrace
    username:admin
    password:123456
  jpa:
    hibernate:
      ddl-auto:create
    properties:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQLDialect
  security:
    oauth2:
      client:
        registration:
          google:
             etc ...

这些配置哪里出错了?

lnxxn5zx

lnxxn5zx1#

您的YAML文件格式不正确。首先,您需要使用:而不是=分隔driver-class-name及其值。其次,您需要在表示Map键的每个:之后放置一个空格。根据YAML 1.2.2规范:
通常情况下,YAML要求“:“Map值指示符与值之间用白色分隔。这种限制的好处是,“:“字符可以在纯标量中使用,只要它后面不跟空格。这允许不带引号的URL和时间戳。它也是一个潜在的混淆源,因为“a:1”是纯标量,而不是键/值对。
第三,为了避免更多的错误,您可能需要考虑将url的值放在引号中,最终的application.yaml可能如下所示:

spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    url: "jdbc:postgresql://localhost:5432/pennantrace"
    username: admin
    password: 123456
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQLDialect
# ...etc

相关问题