atom feed3 messages in net.java.dev.glassfish.usersglassfish, jdbcRealm, custom GUI logi...
FromSent OnAttachments
glas...@javadesktop.orgDec 24, 2007 6:11 pm 
glas...@javadesktop.orgDec 26, 2007 11:26 pm 
glas...@javadesktop.orgJan 2, 2008 9:15 am 
Subject:glassfish, jdbcRealm, custom GUI login dialog.Error: No LoginModules config
From:glas...@javadesktop.org (glas@javadesktop.org)
Date:Dec 24, 2007 6:11:56 pm
List:net.java.dev.glassfish.users

I have written an application with a secure EJB3 module and a swing GUI app
client that is run via java webstart. Everything works great, with
authentication for test users allowing me access to the secure EJB. I am using
netbeans 6 and glassfish v2 with java 1.5

The problem is that I want to customize the GUI login dialog that pops up. The
default GUI login dialog that glassfish provides is not sufficient. I have
implemented a callback function and when I run it I get and exception (all can
be seen below): "No LoginModules configured".

I want to keep using the LoginModules in glassfish with the jdbcrealm and don't
want to write one myself, so I don't know how to proceed. Where do I tell my
code to just use the default login module that glassfish was using before?

I have the following callback code:

/** * JOnAS: Java(TM) Open Application Server * Copyright (C) 1999-2004 Bull S.A. * Contact: jona@objectweb.org * * License: GPL V2 */

package ca.littleriver.bovinemanagement.appclient;

import java.awt.GridLayout;

import java.io.IOException;

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.swing.BoxLayout;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

public class DialogCallbackHandler implements CallbackHandler {

private JTextField loginField = null;

private JTextField passwordField = null;

private boolean cancelled = false;

private String title = "David's Login Dialog";

private String username = "Username ";

private String password = "Password ";

private String loginButton = "Duhh Login !";

private String cancelButton = "Cancel";

private static final int MAX_FIELD_LENGTH = 20;

private int passwordLength = MAX_FIELD_LENGTH;

private int usernameLength = MAX_FIELD_LENGTH;

private char echoChar = '*';

private boolean echoCharOn = false;

private String[] connectOptionNames;

public DialogCallbackHandler() {

super();

int i = 0;

connectOptionNames = new String[2];

connectOptionNames[i] = loginButton;

connectOptionNames[++i] = cancelButton;

}

public DialogCallbackHandler(String title) {

this();

this.title = title;

}

public DialogCallbackHandler(String title, String username, String password)
{

this();

this.title = title;

this.username = username;

this.password = password;

}

public DialogCallbackHandler(String title, String username, String password,
String loginButton, String cancelButton, int usernameLength, int passwordLength,
char echoChar) {

this(title, username, password);

this.echoCharOn = true;

this.echoChar = echoChar;

this.loginButton = loginButton;

this.cancelButton = cancelButton;

this.passwordLength = passwordLength;

this.usernameLength = usernameLength;

this.echoChar = echoChar;

}

private void dialogInit(boolean isEchoOn) {

echoCharOn = (isEchoOn || echoCharOn);

dialogInit();

}

private void dialogInit() {

JLabel userNameLabel = new JLabel(username, JLabel.RIGHT);

loginField = new JTextField("");

JLabel passwordLabel = new JLabel(password, JLabel.RIGHT);

if (!echoCharOn) {

passwordField = new JPasswordField(passwordLength);

((JPasswordField)passwordField).setEchoChar(echoChar);

} else {

passwordField = new JTextField(passwordLength);

}

JPanel connectionPanel = new JPanel(false);

connectionPanel.setLayout(new BoxLayout(connectionPanel,
BoxLayout.X_AXIS));

JPanel namePanel = new JPanel(false);

namePanel.setLayout(new GridLayout(0, 1));

namePanel.add(userNameLabel);

namePanel.add(passwordLabel);

JPanel fieldPanel = new JPanel(false);

fieldPanel.setLayout(new GridLayout(0, 1));

fieldPanel.add(loginField);

fieldPanel.add(passwordField);

connectionPanel.add(namePanel);

connectionPanel.add(fieldPanel);

int choice = JOptionPane.showOptionDialog(null, connectionPanel, title,
JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null,
connectOptionNames, loginField);

if (choice == JOptionPane.OK_OPTION) {

cancelled = false;

} else if (choice == JOptionPane.CANCEL_OPTION) {

cancelled = true;

} else if (choice == JOptionPane.CLOSED_OPTION) {

cancelled = true;

} else {

cancelled = true;

}

if (cancelled) {

loginField.setText("Invalid");

passwordField.setText("Invalid");

}

}

public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {

if (cancelled) {

return;

}

int i = 0;

boolean found = false;

while ((i < callbacks.length) && !found) {

if (callbacks[i] instanceof PasswordCallback) {

found = true;

dialogInit(((PasswordCallback)callbacks[i]).isEchoOn());

}

i++;

}

if (!found) {

dialogInit();

}

for (i = 0; i < callbacks.length; i++) {

if (callbacks[i] instanceof NameCallback) {

((NameCallback)callbacks[i]).setName(loginField.getText());

} else if (callbacks[i] instanceof PasswordCallback) {

((PasswordCallback)callbacks[i]).setPassword((passwordField.getText()).toCharArray());

} else {

throw new UnsupportedCallbackException(callbacks[i],
"Unrecognized Callback");

}

}

}

} /**************************************** */

After I see the login window from the above code I get the following exception:

java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:494) at com.sun.enterprise.appclient.jws.boot.JWSACCMain.run(JWSACCMain.java:218) at com.sun.enterprise.appclient.jws.boot.JWSACCMain.main(JWSACCMain.java:177) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at com.sun.javaws.Launcher.executeApplication(Launcher.java:1171) at com.sun.javaws.Launcher.executeMainClass(Launcher.java:1118) at com.sun.javaws.Launcher.continueLaunch(Launcher.java:961) at com.sun.javaws.Launcher.handleApplicationDesc(Launcher.java:515) at com.sun.javaws.Launcher.handleLaunchFile(Launcher.java:218) at com.sun.javaws.Lau

java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:494) at com.sun.enterprise.appclient.jws.boot.JWSACCMain.run(JWSACCMain.java:218) at com.sun.enterprise.appclient.jws.boot.JWSACCMain.main(JWSACCMain.java:177) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at com.sun.javaws.Launcher.executeApplication(Launcher.java:1171) at com.sun.javaws.Launcher.executeMainClass(Launcher.java:1118) at com.sun.javaws.Launcher.continueLaunch(Launcher.java:961) at com.sun.javaws.Launcher.handleApplicationDesc(Launcher.java:515) at com.sun.javaws.Launcher.handleLaunchFile(Launcher.java:218) at com.sun.javaws.Launcher.run(Launcher.java:165) at java.lang.Thread.run(Thread.java:595) Caused by: java.lang.RuntimeException:
java.lang.reflect.InvocationTargetException at
com.sun.enterprise.appclient.MainWithModuleSupport.<init>(MainWithModuleSupport.java:428) ... 17 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at com.sun.enterprise.util.Utility.invokeApplicationMain(Utility.java:266) at
com.sun.enterprise.appclient.MainWithModuleSupport.<init>(MainWithModuleSupport.java:417) ... 17 more Caused by: javax.security.auth.login.LoginException: No LoginModules configured
for k at javax.security.auth.login.LoginContext.init(LoginContext.java:256) at javax.security.auth.login.LoginContext.<init>(LoginContext.java:334) at ca.littleriver.bovinemanagement.appclient.Main.<init>(Main.java:77) at ca.littleriver.bovinemanagement.appclient.Main.main(Main.java:186) ... 23 more [Message sent by forum member 'dwaddy' (dwaddy)]

http://forums.java.net/jive/thread.jspa?messageID=251360