Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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安全性与MongoDB数据源错误_Java_Spring_Mongodb_Spring Security - Fatal编程技术网

Java Spring安全性与MongoDB数据源错误

Java Spring安全性与MongoDB数据源错误,java,spring,mongodb,spring-security,Java,Spring,Mongodb,Spring Security,我想在MongoDB数据库中使用Spring安全性。我搜索了一些spring security的示例代码,但它不适用于我的mogno连接 这是我的MongoDB配置文件 @Configuration @EnableMongoRepositories("com.lab.repository") public class DatabaseConfiguration extends AbstractMongoConfiguration{ @Value("${spring.data.mong

我想在MongoDB数据库中使用Spring安全性。我搜索了一些spring security的示例代码,但它不适用于我的mogno连接

这是我的MongoDB配置文件

@Configuration
@EnableMongoRepositories("com.lab.repository")
public class DatabaseConfiguration  extends AbstractMongoConfiguration{

    @Value("${spring.data.mongodb.host}")
    private String host;

    @Value("${spring.data.mongodb.port}")
    private Integer port;

    @Value("${spring.data.mongodb.username}")
    private String username;

    @Value("${spring.data.mongodb.database}")
    private String database;

    @Value("${spring.data.mongodb.password}")
    private String password;

    @Bean
    @Override
    protected String getDatabaseName() {
        return database;
    }

    @Override
    public Mongo mongo() throws Exception {
        return new MongoClient(host + ":" + port);
    }
} 
当我使用Spring安全配置类时

@EnableAuthorizationServer
@Configuration
public class OAuth2AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Autowired
    private DataSource dataSource;

    @Override
    public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
        oauthServer.tokenKeyAccess("permitAll()")
                .checkTokenAccess("isAuthenticated()");
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.jdbc(dataSource)
                .withClient("clientIdPassword")
                .secret("secret")
                .authorizedGrantTypes(
                        "password", "authorization_code", "refresh_token")
                .scopes("read", "post");
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints)
            throws Exception {
        endpoints.tokenStore(tokenStore())
                .authenticationManager(authenticationManager);
    }

    @Bean
    public TokenStore tokenStore() {
        return new JdbcTokenStore(dataSource);
    }

}
我运行应用程序时发现错误

***************************
APPLICATION FAILED TO START
***************************

Description:

Field dataSource in com.newssystem.lab.config.OAuth2AuthorizationServerConfig required a bean of type 'javax.sql.DataSource' that could not be found.
    - Bean method 'dataSource' not loaded because @ConditionalOnClass did not find required class 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType'
    - Bean method 'dataSource' not loaded because @ConditionalOnClass did not find required classes 'javax.transaction.TransactionManager', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType'


Action:

Consider revisiting the conditions above or defining a bean of type 'javax.sql.DataSource' in your configuration.

如何为我的Mongo配置添加属性数据源

数据源用于带有支持JDBC的驱动程序的SQL数据库。它不适用于NoSQL的MongoDB(事实上MongoJDBC驱动程序确实存在,但我不会去那里)。只需为TokenStore和ClientDetailsService提供您自己的实现,即可从Mongo存储库(或MongoTemplate)获取必要的信息。对于前者,将JdbcTokenStore替换为您的TokenStore实现。对于后者(假设您的客户端是动态的,需要从Mongo检索),您可以按如下方式配置它:

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    clients.withClientDetails(myClientDetailsService);
}

DataSource用于SQL数据库,其驱动程序支持JDBC。它不适用于NoSQL的MongoDB(事实上MongoJDBC驱动程序确实存在,但我不会去那里)。只需为TokenStore和ClientDetailsService提供您自己的实现,即可从Mongo存储库(或MongoTemplate)获取必要的信息。对于前者,将JdbcTokenStore替换为您的TokenStore实现。对于后者(假设您的客户端是动态的,需要从Mongo检索),您可以按如下方式配置它:

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    clients.withClientDetails(myClientDetailsService);
}

您需要定义
DataSource
,您这样做了吗?我可以在
DatabaseConfiguration
中这样做,然后返回
Mongo
对象吗?是的。请….好的,我试着这样做,
@Bean public DataSource mongoDataSource(){return(DataSource)new MongoClient(host+”:“+port);}
但它不起作用
MongoClient不能转换为javax.sql.DataSource
您在
OAuth2AuthorizationServerConfig
中自动连接的
数据源
字段是什么?我想这不是mongoDb相关的bean。您需要定义
数据源
,您这样做了吗?我可以在
数据库配置
中这样做,然后返回
Mongo
对象吗?是的。请….好的,我试着这样做,
@Bean public DataSource mongoDataSource(){return(DataSource)new MongoClient(host+”:“+port);}
但它不起作用
MongoClient不能转换为javax.sql.DataSource
您在
OAuth2AuthorizationServerConfig
中自动连接的
数据源
字段是什么?我猜这不是mongoDb相关的bean。