SimpleAuthenticator.java
上传用户:dinglihq
上传日期:2013-02-04
资源大小:99958k
文件大小:5k
源码类别:

Java编程

开发平台:

Java

  1. /*
  2.  * @(#)SimpleAuthenticator.java 1.7 01/05/23
  3.  *
  4.  * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  * 
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in the
  15.  *   documentation and/or other materials provided with the distribution.
  16.  * 
  17.  * Neither the name of Sun Microsystems, Inc. or the names of contributors
  18.  * may be used to endorse or promote products derived from this software
  19.  * without specific prior written permission.
  20.  * 
  21.  * This software is provided "AS IS," without a warranty of any kind. ALL
  22.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
  23.  * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
  24.  * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
  25.  * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR LIABILITIES
  26.  * SUFFERED BY LICENSEE AS A RESULT OF  OR RELATING TO USE, MODIFICATION
  27.  * OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
  28.  * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  29.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
  30.  * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
  31.  * ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS
  32.  * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  33.  * 
  34.  * You acknowledge that Software is not designed, licensed or intended
  35.  * for use in the design, construction, operation or maintenance of any
  36.  * nuclear facility.
  37.  */
  38. /*
  39.  * @(#)SimpleAuthenticator.java 1.7 01/05/23
  40.  *
  41.  * Copyright (c) 1996-1998 by Sun Microsystems, Inc.
  42.  * All Rights Reserved.
  43.  */
  44. import javax.mail.*;
  45. import java.net.InetAddress;
  46. import java.awt.*;
  47. import javax.swing.*;
  48. /**
  49.  * Simple Authenticator for requesting password information.
  50.  *
  51.  * @version 1.7, 01/05/23
  52.  * @author Christopher Cotton
  53.  * @author Bill Shannon
  54.  */
  55. public class SimpleAuthenticator extends Authenticator {
  56.     Frame frame;
  57.     String username;
  58.     String password;
  59.     public SimpleAuthenticator(Frame f) {
  60. this.frame = f;
  61.     }
  62.     protected PasswordAuthentication getPasswordAuthentication() {
  63. // given a prompt?
  64. String prompt = getRequestingPrompt();
  65. if (prompt == null)
  66.     prompt = "Please login...";
  67. // protocol
  68. String protocol = getRequestingProtocol();
  69. if (protocol == null)
  70.     protocol = "Unknown protocol";
  71. // get the host
  72. String host = null;
  73. InetAddress inet = getRequestingSite();
  74. if (inet != null)
  75.     host = inet.getHostName();
  76. if (host == null)
  77.     host = "Unknown host";
  78. // port
  79. String port = "";
  80. int portnum = getRequestingPort();
  81. if (portnum != -1)
  82.     port = ", port " + portnum + " ";
  83. // Build the info string
  84. String info = "Connecting to " + protocol + " mail service on host " +
  85. host + port;
  86. //JPanel d = new JPanel();
  87. // XXX - for some reason using a JPanel here causes JOptionPane
  88. // to display incorrectly, so we workaround the problem using
  89. // an anonymous JComponent.
  90. JComponent d = new JComponent() { };
  91. GridBagLayout gb = new GridBagLayout();
  92. GridBagConstraints c = new GridBagConstraints();
  93. d.setLayout(gb);
  94. c.insets = new Insets(2, 2, 2, 2);
  95. c.anchor = GridBagConstraints.WEST;
  96. c.gridwidth = GridBagConstraints.REMAINDER;
  97. c.weightx = 0.0;
  98. d.add(constrain(new JLabel(info), gb, c));
  99. d.add(constrain(new JLabel(prompt), gb, c));
  100. c.gridwidth = 1;
  101. c.anchor = GridBagConstraints.EAST;
  102. c.fill = GridBagConstraints.NONE;
  103. c.weightx = 0.0;
  104. d.add(constrain(new JLabel("Username:"), gb, c));
  105. c.anchor = GridBagConstraints.EAST;
  106. c.fill = GridBagConstraints.HORIZONTAL;
  107. c.gridwidth = GridBagConstraints.REMAINDER;
  108. c.weightx = 1.0;
  109. String user = getDefaultUserName();
  110. JTextField username = new JTextField(user, 20);
  111. d.add(constrain(username, gb, c));
  112. c.gridwidth = 1;
  113. c.fill = GridBagConstraints.NONE;
  114. c.anchor = GridBagConstraints.EAST;
  115. c.weightx = 0.0;
  116. d.add(constrain(new JLabel("Password:"), gb, c));
  117. c.anchor = GridBagConstraints.EAST;
  118. c.fill = GridBagConstraints.HORIZONTAL;
  119. c.gridwidth = GridBagConstraints.REMAINDER;
  120. c.weightx = 1.0;
  121. JPasswordField password = new JPasswordField("", 20);
  122. d.add(constrain(password, gb, c));
  123. // XXX - following doesn't work
  124. if (user != null && user.length() > 0)
  125.     password.requestFocus();
  126. else
  127.     username.requestFocus();
  128. int result = JOptionPane.showConfirmDialog(frame, d, "Login",
  129.     JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
  130. if (result == JOptionPane.OK_OPTION)
  131.     return new PasswordAuthentication(username.getText(),
  132. password.getText());
  133. else
  134.     return null;
  135.     }
  136.     private Component constrain(Component cmp,
  137.          GridBagLayout gb, GridBagConstraints c) {
  138. gb.setConstraints(cmp, c);
  139. return (cmp);
  140.     }
  141. }