Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring OAuth服务器JBDCTokenStore错误_Java_Spring_Spring Mvc_Spring Security_Oauth 2.0 - Fatal编程技术网

Java Spring OAuth服务器JBDCTokenStore错误

Java Spring OAuth服务器JBDCTokenStore错误,java,spring,spring-mvc,spring-security,oauth-2.0,Java,Spring,Spring Mvc,Spring Security,Oauth 2.0,我正在尝试将数据库添加到SpringOAuth服务器示例代码中。 这是数据源配置 @Bean(name = "dataSource") public DriverManagerDataSource dataSource() { DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource(); driverManagerDataSource.setDriverClassName("org

我正在尝试将数据库添加到SpringOAuth服务器示例代码中。 这是数据源配置

@Bean(name = "dataSource")
public DriverManagerDataSource dataSource() {
    DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
    driverManagerDataSource.setDriverClassName("org.mariadb.jdbc.Driver");
    driverManagerDataSource.setUrl("jdbc:mariadb://localhost:3306/OAuth");
    driverManagerDataSource.setUsername("root");
    driverManagerDataSource.setPassword("password");
    return driverManagerDataSource;
}
和EndpointConfig

    @Autowired
    private DataSource dataSource;

    @Bean
    public JdbcClientDetailsService clientDetailsService() {
        return new JdbcClientDetailsService(dataSource);
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.withClientDetails(clientDetailsService());
    }
    @Bean
    public TokenStore tokenStore() {
        //return new InMemoryTokenStore();
        return new JdbcTokenStore(dataSource);
    }
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.tokenStore(tokenStore);
        endpoints.userApprovalHandler(userApprovalHandler);
        endpoints.authenticationManager(authenticationManager);
    }
但我在JbdctokenStore上遇到错误,JDBCclientDetails服务工作正常

错误消息:

原因:java.lang.IllegalArgumentException:需要数据源

原因:org.springframework.beans.factory.BeanCreationException: 创建类路径中定义了名为“tokenStore”的bean时出错 资源 [org/springframework/security/oauth/examples/sparkr/config/OAuth2ServerConfig$AuthorizationServerConfiguration.class]: bean实例化失败;嵌套异常是 org.springframework.beans.factory.BeanDefinitionStoreException: 工厂法[公开] org.springframework.security.oauth2.provider.token.TokenStore org.springframework.security.oauth.examples.sparkr.config.OAuth2ServerConfig$AuthorizationServerConfiguration.tokenStore()] 抛出异常;嵌套异常是 java.lang.IllegalArgumentException:需要数据源

我不知道发生了什么。 数据库和表都很好。(我使用示例提供的sql文件。)


我只是在它下面添加了一个新bean,并将dataSource更改为dataSource(), 而且它起作用了。 我不明白,为什么JdbcClientDetailsService要和原始版本一起工作。 但是JdbcTokenStore需要一个新的。
如何更改这部分代码,由于代码重复,代码看起来很凌乱。

尝试使用
@Primary
标记数据源bean。请参阅此处的更多详细信息:

您是否在
JdbcTokenStore
类上有
@Configuration
注释?没有,但我通过在其下添加重复代码来解决此错误。我不知道它为什么起作用。
        @Bean
    public TokenStore tokenStore() {
        //return new InMemoryTokenStore();
        return new JdbcTokenStore(dataSource());

    }

    @Bean
    public DriverManagerDataSource dataSource() {
        DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("org.mariadb.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mariadb://localhost:3306/OAuth");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("a89019");
        return driverManagerDataSource;
    }