/* A custom login module */ import java.util.*; 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.spi.LoginModule; import javax.security.auth.login.LoginException; public class NPLoginModule implements LoginModule { private Subject subject; private CallbackHandler handler; private boolean success; private String name; private String password; private NamePrincipal np; public void initialize(Subject s, CallbackHandler c, Map state, Map options) { subject = s; handler = c; } public boolean login() throws LoginException { success = false; Callback[] callback = new Callback[2]; callback[0] = new NameCallback("Enter your user name"); callback[1] = new PasswordCallback("Enter your password", false); try { handler.handle(callback); name = ((NameCallback)callback[0]).getName(); password = new String(((PasswordCallback)callback[1]).getPassword()); if (name.equals("art") && password.equals("1234")) { success = true; } }catch(Exception e) { e.printStackTrace(); } return success; } public boolean commit() throws LoginException { if (success) { np = new NamePrincipal("np"); subject.getPrincipals().add(np); } return success; } public boolean abort() throws LoginException { boolean ret = false; name = null; if (success) { ret = true; subject.getPrincipals().remove(np); } return ret; } public boolean logout() throws LoginException { name = null; if (success) subject.getPrincipals().remove(np); return true; } }