Author: gnodet
Date: Wed May 21 09:05:14 2008
New Revision: 658734
URL: http://svn.apache.org/viewvc?rev=658734&view=rev
Log:
SMX4KNL-37: fix the remote console login
Modified:
servicemix/smx4/kernel/trunk/gshell/gshell-core/src/main/java/org/apache/geronimo/gshell/remote/server/handler/SpringLoginHandler.java
Modified:
servicemix/smx4/kernel/trunk/gshell/gshell-core/src/main/java/org/apache/geronimo/gshell/remote/server/handler/SpringLoginHandler.java
URL:
http://svn.apache.org/viewvc/servicemix/smx4/kernel/trunk/gshell/gshell-core/src/main/java/org/apache/geronimo/gshell/remote/server/handler/SpringLoginHandler.java?rev=658734&r1=658733&r2=658734&view=diff
==============================================================================
---
servicemix/smx4/kernel/trunk/gshell/gshell-core/src/main/java/org/apache/geronimo/gshell/remote/server/handler/SpringLoginHandler.java
(original)
+++
servicemix/smx4/kernel/trunk/gshell/gshell-core/src/main/java/org/apache/geronimo/gshell/remote/server/handler/SpringLoginHandler.java
Wed May 21 09:05:14 2008
@@ -16,25 +16,85 @@
*/
package org.apache.geronimo.gshell.remote.server.handler;
-import org.apache.geronimo.gshell.common.Notification;
+import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
+import javax.security.auth.Subject;
+
import org.apache.geronimo.gshell.remote.message.LoginMessage;
import org.apache.geronimo.gshell.whisper.transport.Session;
import org.apache.geronimo.gshell.remote.server.timeout.TimeoutManager;
+import org.apache.geronimo.gshell.remote.jaas.JaasConfigurationHelper;
+import org.apache.geronimo.gshell.remote.jaas.UsernamePasswordCallbackHandler;
+import org.apache.geronimo.gshell.remote.jaas.Identity;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+
[EMAIL PROTECTED](role=ServerMessageHandler.class, hint="login")
+public class SpringLoginHandler
+ extends ServerMessageHandlerSupport<LoginMessage>
+ implements Initializable
+{
+ @Requirement
+ private TimeoutManager timeoutManager;
+
+ private String defaultRealm = "BogusLogin";
-public class SpringLoginHandler extends LoginHandler {
+ public SpringLoginHandler() {
+ super(LoginMessage.class);
+ }
- private String defaultRealm;
+ public SpringLoginHandler(final TimeoutManager timeoutManager) {
+ this();
+ this.timeoutManager = timeoutManager;
+ }
- public SpringLoginHandler(final TimeoutManager timeoutManager, String
defaultRealm) {
- super(timeoutManager);
+ public SpringLoginHandler(final TimeoutManager timeoutManager, final
String defaultRealm) {
+ this(timeoutManager);
this.defaultRealm = defaultRealm;
}
- public void handle(Session session, ServerSessionContext context,
LoginMessage message) throws Exception {
- if (message.getRealm() == null) {
- message = new LoginMessage(message.getUsername(),
message.getPassword(), defaultRealm);
+ public void initialize() throws InitializationException {
+ new JaasConfigurationHelper("server.login.conf").initialize();
+ }
+
+ public void handle(final Session session, final ServerSessionContext
context, final LoginMessage message) throws Exception {
+ // Try to cancel the timeout task
+ if (!timeoutManager.cancelTimeout(session)) {
+ log.warn("Aborting login processing; timeout has triggered");
+ }
+ else {
+ String realm = message.getRealm();
+ if (realm == null) {
+ realm = defaultRealm;
+ }
+
+ String username = message.getUsername();
+ char[] password = message.getPassword();
+
+ try {
+ LoginContext loginContext = new LoginContext(realm, new
UsernamePasswordCallbackHandler(username, password));
+ loginContext.login();
+
+ Subject subject = loginContext.getSubject();
+ context.identity = new Identity(subject);
+
+ log.debug("Username: {}, Identity: {}", context.getUsername(),
context.identity);
+
+ LoginMessage.Success reply = new
LoginMessage.Success(context.identity.getToken());
+ reply.setCorrelationId(message.getId());
+ session.send(reply);
+ }
+ catch (LoginException e) {
+ String reason = e.toString();
+ log.debug("Login failed for user: {}, cause: {}", username,
reason);
+
+ LoginMessage.Failure reply = new LoginMessage.Failure(reason);
+ reply.setCorrelationId(message.getId());
+ session.send(reply);
+ }
}
- super.handle(session, context, message);
}
}