我正在使用带有ejb 3.0的glassfish 3.1.1和一个swing客户端,我已经配置了一个jdbc领域用于安全目的。 一切正常,除了一件事,如果用户未能记录(错误的登录或密码),登录对话框永远不再显示,客户端自动将旧的登录名/密码发送到服务器。 我怎样才能解决这个问题 ? 感谢。
编辑此身份验证处理程序的代码
public class ociCallBackHandler implements javax.security.auth.callback.CallbackHandler {
public void handle(Callback[] callbacks) {
try {
String login = null;
char[] mdp = null;
while (login == null || login.length() < 2) {
ArrayList out = GuiLogin.getLogin();
login = (String) out.get(0);
mdp = (char[]) out.get(1);
}
for (int i = 0; i < callbacks.length; i++) {
System.out.println("dans boucle");
if (callbacks[i] instanceof TextOutputCallback) {
// display the message according to the specified type
TextOutputCallback toc = (TextOutputCallback) callbacks[i];
switch (toc.getMessageType()) {
case TextOutputCallback.INFORMATION:
System.out.println("info");
System.out.println(toc.getMessage());
break;
case TextOutputCallback.ERROR:
System.out.println("error");
System.out.println("ERROR: " + toc.getMessage());
break;
case TextOutputCallback.WARNING:
System.out.println("warning");
System.out.println("WARNING: " + toc.getMessage());
break;
default:
System.out.println("inconuue");
throw new IOException("Unsupported message type: "
+ toc.getMessageType());
}
} else if (callbacks[i] instanceof TextInputCallback) {
System.out.println("textINputCallback");
TextInputCallback tic = (TextInputCallback) callbacks[i];
System.err.print(tic.getPrompt());
System.err.flush();
tic.setText("read");
} else if (callbacks[i] instanceof NameCallback) {
// prompt the user for a username
NameCallback nc = (NameCallback) callbacks[i];
nc.setName(login);
} else if (callbacks[i] instanceof PasswordCallback) {
// prompt the user for sensitive information
PasswordCallback pc = (PasswordCallback) callbacks[i];
pc.setPassword(mdp);
} else {
throw new UnsupportedCallbackException(callbacks[i], "Unrecognized Callback");
}
}
} catch (Exception e) {
System.out.println("exceptionn");
System.out.println(e);
}
}
}