logindialog.java.svn-base
来自「开源项目openfire的完整源程序」· SVN-BASE 代码 · 共 1,189 行 · 第 1/4 页
SVN-BASE
1,189 行
/**
* $Revision: $
* $Date: $
*
* Copyright (C) 2006 Jive Software. All rights reserved.
*
* This software is published under the terms of the GNU Lesser Public License (LGPL),
* a copy of which is included in this distribution.
*/
package org.jivesoftware;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.jivesoftware.resource.Default;
import org.jivesoftware.resource.Res;
import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.XMPPError;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.spark.SessionManager;
import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.Workspace;
import org.jivesoftware.spark.component.RolloverButton;
import org.jivesoftware.spark.util.DummySSLSocketFactory;
import org.jivesoftware.spark.util.Encryptor;
import org.jivesoftware.spark.util.GraphicUtils;
import org.jivesoftware.spark.util.ModelUtil;
import org.jivesoftware.spark.util.ResourceUtils;
import org.jivesoftware.spark.util.SwingWorker;
import org.jivesoftware.spark.util.log.Log;
import org.jivesoftware.sparkimpl.plugin.layout.LayoutSettings;
import org.jivesoftware.sparkimpl.plugin.layout.LayoutSettingsManager;
import org.jivesoftware.sparkimpl.settings.local.LocalPreferences;
import org.jivesoftware.sparkimpl.settings.local.SettingsManager;
import javax.security.auth.Subject;
import javax.security.auth.login.Configuration;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JSplitPane;
import javax.swing.JTextField;
import javax.swing.text.JTextComponent;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.AffineTransform;
import java.io.File;
import java.security.Principal;
import java.util.Iterator;
import java.util.List;
import java.util.Hashtable;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Collections;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.Attributes;
import javax.naming.directory.Attribute;
/**
* Dialog to log in a user into the Spark Server. The LoginDialog is used only
* for login in registered users into the Spark Server.
*/
public final class LoginDialog {
private JFrame loginDialog;
private static final String BUTTON_PANEL = "buttonpanel"; // NOTRANS
private static final String PROGRESS_BAR = "progressbar"; // NOTRANS
private LocalPreferences localPref;
/**
* Empty Constructor
*/
public LoginDialog() {
localPref = SettingsManager.getLocalPreferences();
// Check if upgraded needed.
try {
checkForOldSettings();
}
catch (Exception e) {
Log.error(e);
}
}
/**
* Invokes the LoginDialog to be visible.
*
* @param parentFrame the parentFrame of the Login Dialog. This is used
* for correct parenting.
*/
public void invoke(JFrame parentFrame) {
// Before creating any connections. Update proxy if needed.
try {
updateProxyConfig();
}
catch (Exception e) {
Log.error(e);
}
LoginPanel loginPanel = new LoginPanel();
// Construct Dialog
loginDialog = new JFrame(Default.getString(Default.APPLICATION_NAME));
loginDialog.setIconImage(SparkManager.getApplicationImage().getImage());
final JPanel mainPanel = new LoginBackgroundPanel();
final GridBagLayout mainLayout = new GridBagLayout();
mainPanel.setLayout(mainLayout);
final ImagePanel imagePanel = new ImagePanel();
mainPanel.add(imagePanel,
new GridBagConstraints(0, 0, 4, 1,
1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
final String showPoweredBy = Default.getString(Default.SHOW_POWERED_BY);
if (ModelUtil.hasLength(showPoweredBy) && "true".equals(showPoweredBy)) {
// Handle Powered By for custom clients.
final JLabel poweredBy = new JLabel(SparkRes.getImageIcon(SparkRes.POWERED_BY_IMAGE));
mainPanel.add(poweredBy,
new GridBagConstraints(0, 1, 4, 1,
1.0, 0.0, GridBagConstraints.NORTHEAST, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 2, 0), 0, 0));
}
loginPanel.setOpaque(false);
mainPanel.add(loginPanel,
new GridBagConstraints(0, 2, 2, 1,
1.0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
loginDialog.setContentPane(mainPanel);
loginDialog.setLocationRelativeTo(parentFrame);
loginDialog.setResizable(false);
loginDialog.pack();
// Center dialog on screen
GraphicUtils.centerWindowOnScreen(loginDialog);
// Show dialog
loginDialog.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
quitLogin();
}
});
if (loginPanel.getUsername().trim().length() > 0) {
loginPanel.getPasswordField().requestFocus();
}
if (!localPref.isStartedHidden() || !localPref.isAutoLogin()) {
// Make dialog top most.
loginDialog.setVisible(true);
}
}
/**
* Define Login Panel implementation.
*/
private final class LoginPanel extends JPanel implements KeyListener, ActionListener, FocusListener {
private final JLabel usernameLabel = new JLabel();
private final JTextField usernameField = new JTextField();
private final JLabel passwordLabel = new JLabel();
private final JPasswordField passwordField = new JPasswordField();
private final JLabel serverLabel = new JLabel();
private final JTextField serverField = new JTextField();
private final JCheckBox savePasswordBox = new JCheckBox();
private final JCheckBox autoLoginBox = new JCheckBox();
private final RolloverButton loginButton = new RolloverButton();
private final RolloverButton advancedButton = new RolloverButton();
private final RolloverButton quitButton = new RolloverButton();
private final RolloverButton createAccountButton = new RolloverButton();
private final JLabel progressBar = new JLabel();
// Panel used to hold buttons
private final CardLayout cardLayout = new CardLayout(0, 5);
final JPanel cardPanel = new JPanel(cardLayout);
final JPanel buttonPanel = new JPanel(new GridBagLayout());
private final GridBagLayout GRIDBAGLAYOUT = new GridBagLayout();
private XMPPConnection connection = null;
private JLabel headerLabel = new JLabel();
private JLabel accountLabel = new JLabel();
private JLabel accountNameLabel = new JLabel();
private JLabel serverNameLabel = new JLabel();
private JLabel ssoServerLabel = new JLabel();
LoginPanel() {
//setBorder(BorderFactory.createTitledBorder("Sign In Now"));
ResourceUtils.resButton(savePasswordBox, Res.getString("checkbox.save.password"));
ResourceUtils.resButton(autoLoginBox, Res.getString("checkbox.auto.login"));
ResourceUtils.resLabel(serverLabel, serverField, Res.getString("label.server"));
ResourceUtils.resButton(createAccountButton, Res.getString("label.accounts"));
savePasswordBox.setOpaque(false);
autoLoginBox.setOpaque(false);
setLayout(GRIDBAGLAYOUT);
// Set default visibility
headerLabel.setVisible(false);
accountLabel.setVisible(false);
accountNameLabel.setVisible(false);
serverNameLabel.setVisible(false);
headerLabel.setText("Using Single Sign-On (SSO)");
headerLabel.setFont(headerLabel.getFont().deriveFont(Font.BOLD));
accountLabel.setText("Account:");
ssoServerLabel.setText("Server:");
accountNameLabel.setFont(accountLabel.getFont().deriveFont(Font.BOLD));
serverNameLabel.setFont(ssoServerLabel.getFont().deriveFont(Font.BOLD));
accountNameLabel.setForeground(new Color(106, 127, 146));
serverNameLabel.setForeground(new Color(106, 127, 146));
add(usernameLabel,
new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 0, 5), 0, 0));
add(usernameField,
new GridBagConstraints(1, 0, 2, 1,
1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
new Insets(5, 5, 0, 5), 0, 0));
add(accountLabel,
new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 0, 5), 0, 0));
add(accountNameLabel,
new GridBagConstraints(1, 1, 1, 1,
1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
new Insets(5, 5, 0, 5), 0, 0));
add(passwordField,
new GridBagConstraints(1, 1, 2, 1,
1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
new Insets(5, 5, 0, 5), 0, 0));
add(passwordLabel,
new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 0, 5), 5, 0));
// Add Server Field Properties
add(serverField,
new GridBagConstraints(1, 2, 2, 1,
1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
new Insets(5, 5, 0, 5), 0, 0));
add(serverNameLabel,
new GridBagConstraints(1, 2, 2, 1,
1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
new Insets(5, 5, 0, 5), 0, 0));
add(serverLabel,
new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 0, 5), 5, 0));
add(headerLabel,
new GridBagConstraints(0, 5, 2, 1, 1.0, 0.0,
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?