[CDO/Net4j] How to properly authenticate [message #1611344] |
Wed, 11 February 2015 04:59  |
Eclipse User |
|
|
|
Dear community,
I want to use a Net4j TCP connection with authentication in my client-server-application. I wire container manually for more control, like that:
IManagedContainer container = ContainerUtil.createContainer();
Net4jUtil.prepareContainer(container);
TCPUtil.prepareContainer(container);
How do I plug a security mechanism in there? I tried some things with UserManager and ChallangeNegogiation but got no luck.
I saw some documentation using post processing but I would like to have the authentication at connection time, not afterwards if possible.
I also read some test which referred to internal implementations but there should be another way I think.
Thanks in advance.
|
|
|
|
|
|
|
|
|
|
|
|
Re: [CDO/Net4j] How to properly authenticate [message #1637181 is a reply to message #1632974] |
Thu, 26 February 2015 10:30   |
Eclipse User |
|
|
|
Ok, I did the following to get it working.
private void startServer() throws InterruptedException {
IManagedContainer container = ContainerUtil.createContainer();
Net4jUtil.prepareContainer(container);
TCPUtil.prepareContainer(container);
IBufferPool bPool = Net4jUtil.createBufferPool();
LifecycleUtil.activate(bPool);
UserManager uManager = new UserManager();
uManager.addUser("peter", "kilometer".toCharArray());
uManager.activate();
container.registerFactory(new RandomizerFactory());
container.registerFactory(new ChallengeNegotiatorFactory());
container.registerFactory(new ActivityServerProtocol.Factory());
container.activate();
ITCPAcceptor acceptor = null;
Randomizer randomizer = null;
ChallengeNegotiator negotiator = null;
try {
acceptor = (ITCPAcceptor) container.getElement("org.eclipse.net4j.acceptors", "tcp", "127.0.0.1:2036",
false);
randomizer = (Randomizer) container.getElement("org.eclipse.net4j.randomizers", "default", null);
negotiator = (ChallengeNegotiator) container.getElement("org.eclipse.net4j.Negotiators", "challenge", null,
false);
negotiator.setRandomizer(randomizer);
negotiator.setUserManager(uManager);
((TCPAcceptor) acceptor).getConfig().setBufferProvider(bPool);
((TCPAcceptor) acceptor).getConfig().setNegotiator(negotiator);
randomizer.activate();
negotiator.activate();
LifecycleUtil.activate(acceptor);
while (true) {
Thread.sleep(5000);
for (IConnector connector : acceptor.getAcceptedConnectors()) {
System.out.println(connector.openChannel().getUserID());
}
}
} finally {
if (randomizer != null) {
randomizer.deactivate();
}
if (negotiator != null) {
negotiator.deactivate();
}
if (acceptor != null) {
LifecycleUtil.deactivate(acceptor);
}
LifecycleUtil.deactivate(container);
uManager.deactivate();
LifecycleUtil.deactivate(bPool);
}
}
private void startClient() throws RemoteException, Exception {
IManagedContainer container = ContainerUtil.createContainer();
Net4jUtil.prepareContainer(container);
TCPUtil.prepareContainer(container);
PasswordCredentialsProvider credentials = new PasswordCredentialsProvider("peter", "kilometer");
LifecycleUtil.activate(credentials);
container.registerFactory(new ResponseNegotiatorFactory());
container.activate();
ITCPConnector connector = null;
ResponseNegotiator negotiator = null;
try {
connector = (ITCPConnector) container.getElement("org.eclipse.net4j.connectors", "tcp", "127.0.0.1:2036",
false);
negotiator = (ResponseNegotiator) container.getElement("org.eclipse.net4j.Negotiators", "response", null,
false);
negotiator.setCredentialsProvider(credentials);
((TCPConnector) connector).getConfig().setNegotiator(negotiator);
negotiator.activate();
LifecycleUtil.activate(connector);
while (connector != null) {
ActivityClientProtocol protocol = new ActivityClientProtocol(connector);
ActivityRequest request = new ActivityRequest(protocol, "Client Peter Kilometer requesting...");
String echo = request.send();
protocol.close();
if (!"OK".equals(echo)) {
throw new RuntimeException("Server is not there!");
}
System.out.println(echo + " " + connector.openChannel().getUserID());
Thread.sleep(5000);
}
} finally {
if (negotiator != null) {
negotiator.deactivate();
}
if (connector != null) {
LifecycleUtil.deactivate(connector);
}
LifecycleUtil.deactivate(container);
LifecycleUtil.deactivate(credentials);
}
}
However is there any possibility to configure the ITCPAcceptor and ITCPConnector correctly without accessing them through their implementations? Maybe something like ChallengeNegotiatorConfigurer though it is not sufficient at all. I really would like to prevent using restricted code.
|
|
|
|
Powered by
FUDForum. Page generated in 0.05782 seconds