blob: a35e4e2dd8a52cc2b782997fa839761f51ce9edf [file] [log] [blame]
package org.eclipse.equinox.examples.httpsecurity;
import java.io.IOException;
import java.security.Principal;
import java.util.Map;
import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.login.LoginException;
import javax.security.auth.spi.LoginModule;
public class SimpleLoginModule implements LoginModule {
private CallbackHandler handler;
private Subject subject;
private Principal user;
public void initialize(Subject subject, final CallbackHandler handler,
Map arg2, Map arg3) {
this.handler = handler;
this.subject = subject;
}
public boolean login() throws LoginException {
final Callback[] callbacks = { new NameCallback("Username"),
new PasswordCallback("Password", false) };
try {
handler.handle(callbacks);
} catch (IOException e) {
throw new LoginException(e.getMessage());
} catch (UnsupportedCallbackException e) {
throw new LoginException(e.getMessage());
}
if ("user".equals(((NameCallback) callbacks[0]).getName())
&& "password".equals(new String(((PasswordCallback) callbacks[1])
.getPassword()))) {
user = new Principal() {
public boolean equals(Object obj) {
if (!(obj instanceof Principal))
return false;
return getName().equals(((Principal) obj).getName());
}
public int hashCode() {
return getName().hashCode();
}
public String toString() {
return getName().toString();
}
public String getName() {
// TODO Auto-generated method stub
return ((NameCallback) callbacks[0]).getName();
}
};
return true;
}else
throw new LoginException("Login failed");
}
public boolean logout() throws LoginException {
return true;
}
public boolean abort() throws LoginException {
return true;
}
public boolean commit() throws LoginException {
subject.getPrincipals().add(user);
return true;
}
}