Dear Jettro.
Can you help me, how could you do it?
I try to comminicate to Elasticsearch with Shield plugin. This is done when
I make CURL requests.
Without shield plugin my JAVA code ( Client is same as yours ) works well.
But after install Shield, and put Shield into maven depencies in my
application:
org.elasticsearch
elasticsearch-shield
1.0.1
I got strange error, without creating any change in my code:
12:53:23,746 INFO [org.elasticsearch.plugins] (default task-1) [Honey
Lemon] loaded [shield], sites
12:53:23,987 INFO [org.elasticsearch.transport] (default task-1) [Honey
Lemon] Using
[org.elasticsearch.shield.transport.ShieldClientTransportService] as
transport service, overridden by [shield]
12:53:23,987 INFO [org.elasticsearch.transport] (default task-1) [Honey
Lemon] Using
[org.elasticsearch.shield.transport.netty.ShieldNettyTransport] as
transport, overridden by [shield]
12:53:24,232 ERROR [org.jboss.as.ejb3.invocation] (default task-1)
JBAS014134: EJB Invocation failed on component Elasticsearch for method
public org.elasticsearch.client.Client
net...search.Elasticsearch.AuthElasticSearch(java.lang.String,java.lang.String):
javax.ejb.EJBException: org.elasticsearch.common.inject.CreationException:
Guice creation errors:
- A binding to org.elasticsearch.shield.transport.filter.IPFilter was
already configured at unknown.
at unknown
- A binding to org.elasticsearch.shield.transport.ClientTransportFilter
was already configured at unknown.
at unknown
- A binding to org.elasticsearch.shield.ssl.SSLService was already
configured at unknown.
at unknown
3 errors
My code:
@SuppressWarnings("resource")
public Client AuthElasticSearch(String user, String pass) {
Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name",
"****").put("client.transport.sniff", true)
.put("shield.user", user + ":" + pass).build();
Client client = new TransportClient(settings).addTransportAddress(new
InetSocketTransportAddress("localhost", 9300));
return client;
}
Both ES versions in Ubuntu and app are 1.4.4
Both SHIELD versions are 1.0.1
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
Thank you.
- január 29., csütörtök 0:46:53 UTC+1 időpontban Jettro Coenradie a
következőt írta:
Never mind, misread the documentation. It seems a node info request is
done first, therefore you need to provide the username password in the
client. Than if you want to, you can change the username password for each
request that you do.
It works now.
Op woensdag 28 januari 2015 22:12:31 UTC+1 schreef Jettro Coenradie:
Hi,
trying to get Shield working with a java client. When setting the header
token on the client, there is no problem. But when I try to use the header
of a request there is no succes. I am trying this code, which is almost a
copy of the sample code in the documentation. It does not work, if I
uncomment the line with shield.user, it does work: Any clues on what I
should do are appreciated.
package nl.gridshore.dwes.elastic;
import org.elasticsearch.action.count.CountResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.shield.authc.support.SecuredString;
import java.util.ArrayList;
import java.util.List;
import static java.util.stream.Collectors.toList;
import static
org.elasticsearch.shield.authc.support.UsernamePasswordToken.basicAuthHeaderValue;
public class SecureElastic {
public static void main(String args) {
Settings settings = ImmutableSettings.settingsBuilder()
.put("cluster.name", "jc-play")
// .put("shield.user", "jettro:nopiforme")
.build();
Client client = new TransportClient(settings)
.addTransportAddress(new
InetSocketTransportAddress("localhost",9300));
String token = basicAuthHeaderValue("jettro", new
SecuredString("nopiforme".toCharArray()));
SearchResponse searchResponse =
client.prepareSearch("gridshore").putHeader("Authorization", token).get();
long totalHits = searchResponse.getHits().totalHits();
System.out.println(totalHits);
}
}
The exception:
Caused by: org.elasticsearch.shield.authc.AuthenticationException:
missing authentication token for action [cluster:monitor/nodes/info]
--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/860e98d4-63a3-4bd7-816b-095405e799a4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.