basic-authenticationsolrjsolrcloudspring-data-solr

How to configure Spring data SolrCloud connection with Basic Authentication


I have configure Solr 6.2.1 as SolrCloud. Later I have Configured Basic Authentication. I am going to configure Spring data solr 2.0.4.RELEASE with Solrj 6.2 and this is my code:

@Configuration
@EnableSolrRepositories(basePackages = { "ir.saeed.server.solr" }, multicoreSupport = true)

public class SearchContext {

    @Value("${solr.host}")

    private String host;


    @Value("${solr.port}")

    private Integer port;


    @Value("${solr.username}")

    private String username;


    @Value("${solr.password}")

    private String password;


    @Value("${zkHost}")

    private String zkHost;


    @Value("${solr.coreName}")

    private String collectionName;


    @Bean

    public SolrTemplate solrTemplate() {

        return new SolrTemplate(solrClientFactory());

    }


    @Bean

    public BasicCredentialsProvider credentialsProvider() {

        BasicCredentialsProvider provider = new BasicCredentialsProvider();

        provider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));

        return provider;

    }


    @Bean

    public SolrClientFactory solrClientFactory() {

        return new HttpSolrClientFactory(solrClient(), "", credentialsProvider().getCredentials(AuthScope.ANY), "BASIC");

    }


    @Bean

    public SolrClient solrClient() {

        return new CloudSolrClient.Builder().withZkHost(zkHost).build();

    }

}

But when i run my web application this Exception occures:

 10:51:48,110 org.springframework.data.solr.UncategorizedSolrException: nested exception is java.lang.NullPointerException


 10:51:48,111   at org.springframework.data.solr.core.SolrTemplate.execute(SolrTemplate.java:172)


 10:51:48,111   at org.springframework.data.solr.core.SolrTemplate.executeSolrQuery(SolrTemplate.java:509)


 10:51:48,111   at org.springframework.data.solr.core.SolrTemplate.query(SolrTemplate.java:504)


 10:51:48,111   at org.springframework.data.solr.core.SolrTemplate.doQueryForPage(SolrTemplate.java:338)


 10:51:48,111   at org.springframework.data.solr.core.SolrTemplate.queryForPage(SolrTemplate.java:350)

How can I resolve the issue? I think my Configuration is incorrect


Solution

  • Yes, your configuration seems incorrect. I had same issue like yours

    I would like to use apache solr version 6.6.0 and spring data solr version 2.0.8 (bought by spring boot starter). It turned out that the version from spring data solr doesn't have support for apache solr version > 5, because when you traced

    at org.springframework.data.solr.core.SolrTemplate.execute(SolrTemplate.java:172), it's very clear that when the solrTemplate is going to createClientForCore, it will clone from the cloudSolrClient that we have been configured

    enter image description here

    the problem is in String zkHost = (String)readField(solrClient, "zkHost"); * it will return null since in apache solr version > 5, the zkHost is stored in "clusterStateProvider" not in the same level as "cloudSolrClient"

    Solved: If you want keep using spring data solr version 2, you need to downgrade the apache solr version