netbeans netbeans platform login tutorial

Upload: arasurrk

Post on 06-Apr-2018

275 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/2/2019 NetBeans NetBeans Platform Login Tutorial

    1/12

    Search:

    netbeans.org> projects > platform > Website

    NetBeans Platform

    NetBeans Platform Login Tutorial

    This tutorial demonstrates how to create a login form for a NetBeans Platform application with very simpleuser and password management. The login will be implemented with the DialogDisplayer class of the

    NetBeans APIs.

    The dialog that you create in this tutorial will be visible whenever the user starts the application. The

    passwords and usernames will be stored in a preferences file, which is not very safe. Therefore, this tutorial

    will provide a solution to encrypt the passwords with "Message-Digest Algorithm 5" (MD5). MD5 is a

    cryptographic hash-function invented by Roland L. Rivest. To use MD5 in our application, the

    java.security package will help us.

    Contents

    Installing The Software

    Setting Up The Module Suite

    Creating A Simple User And Password Management

    Create Option Panel For The User Management

    Use MD5 To Encrypt Password

    Other Possibilities

    Creating The Login Module

    All The Code At Once

    LoginForm.java

    Installer.java

    UsermanagementPanel.java

    Next Steps

    Versioning

    For more information on working with modules, see the NetBeans Development Project home on the

    NetBeans website. If you have questions, visit the NetBeans Developer FAQ or use the feedback link at the

    bottom of this page.

    Installing The SoftwareBefore you begin, you need to install the following software on your computer:

    NetBeans IDE 6.0 (download)

    Java Standard Development Kit (JDK) version 1.4.2 (download) or 5.0 (download) or later

    Setting Up The Module Suite

    The first thing you have to do is to create a sample project. We will use a Module Suite. Here you can use the

    wizard that the IDE provides.

    Choose File > New Project (Ctrl-Shift-N). Under Categories, select NetBeans Modules. Under projects,

    select Module Suite and click Next.

    1.

    In the next panel you have to give the suite a proper name, such as LoginSuite, and set the location

    to any directory on your computer. Click Finish.

    2.

    Now the IDE has created an empty suite for you. You can even test it when you right-click the module

    suite name and choose run. There will start a whole new IDE. But we do not need a complete IDE. So if

    you like, you can make the start of your application faster by following these few optional steps:

    3.

    Right-click the module suite name. Choose 'Properties'. Select 'Libraries'. Now you see on the right side

    a list of 'Platfom Modules'. Deselect all except of 'platform7'. Click OK.

    4.

    If you run the application again there will only be a window with the essential buttons and menus. It

    should look like this:

    5.

    Login | Join Now | Help

    Documentation

    Overview

    What's New in 7.1?

    What's the Difference

    between NetBeans

    Platform and Eclipse RCP?

    Customer Stories

    Screenshots

    Purchase Commercial

    Support

    Getting Started

    NetBeans Plugin Quick

    Start

    NetBeans Platform Quick

    Start

    NetBeans Platform

    Developer FAQs

    NetBeans APIs in a

    Nutshell

    NetBeans API Javadoc

    Latest NetBeans API

    Changes

    All NetBeans Platform

    Docs

    Support

    Professional Support

    Services

    Sun Developer Expert

    Assistance Program

    Sun Microsystems Support

    Plans for NetBeans IDE

    Comm unity Forums and

    Resources

    NetBeans Platform

    Developer FAQs

    NetBeans Platform Mailing

    List

    NetBeans.org

    News

    Releases & Planning

    Mailing Lists

    Bugzilla

    Contribute

    Teams

    Guidelines

    Beans NetBeans Platform Login Tutorial http://platform.netbeans.org/tutorials/60/nbm-login.html

    12 06-03-2012 22:18

  • 8/2/2019 NetBeans NetBeans Platform Login Tutorial

    2/12

    Creating A Simple User And Password Management

    To have as little work as possible, we will use some very interesting features of NetBeans IDE to create our

    simple user management. This management will only be able to store one username and one password in a

    preferences file.

    Create Option Panel For The User ManagementIn this section we will show you how to create an option panel to handle your username and password.

    At first we create a new module by right-clicking on the Modules folder in our suite and choosing Add

    New....

    1.

    Now a wizard for adding a new module appears. You have to enter a name for your module, for

    example 'UserManagement'. Click Next.

    2.

    Change now the Code Base name, so that it fits into your application. Click Finish.3.

    After that the NetBeans IDE has created a new module for you. So, now we have to create a so called options

    panel to easily set our password and username.

    Right-click on the Source Packages of your new module and select New > Other... .1.

    A wizard appears and you should select the category 'Module Development' and in the list of filetypes

    you should select 'Options Panel'. Click Next.

    2.

    Here we can choose whether we want a whole new panel category or a new panel in the 'Miscellaneous'

    category. In our case we will use the 'Miscellaneous' one. To complete this task enter a name and a tool

    tip text. Click Next.

    3.

    On this panel you can now choose a class name prefix. I recommend to accept the IDE suggestion.

    Click Finish.

    4.

    Next there are some files opened by the IDE. For now we only need the Panel.java.

    Go to this file and go into the Design-View and follow the instructions below.

    Use the Palette and add two labels and two textfields.1.

    Beans NetBeans Platform Login Tutorial http://platform.netbeans.org/tutorials/60/nbm-login.html

    12 06-03-2012 22:18

  • 8/2/2019 NetBeans NetBeans Platform Login Tutorial

    3/12

    Then rename the top label to 'Username' and the bottom one to 'Password'. Delete the texts of the

    textfields and rename the variables to 'user' and 'pass'.

    2.

    Now go to the Source-View and look for two methods called load and store. These two methods are

    used to initialize the textfields and to store changes.

    3.

    Change the source code of 'store' to the following:

    void store() {

    NbPreferences.forModule(UsermanagementPanel.class).put("user",

    user.getText());

    NbPreferences.forModule(UsermanagementPanel.class).put("pass",

    pass.getText());

    }

    With this code a new NetBeans Preferences file is created and the information of the textfields is stored

    into it with the written keys. Then add imports for org.openide.util.NbPreferences.

    4.

    Now change the source code for 'load' in the following way:

    void load() {

    user.setText(NbPreferences.forModule(UsermanagementPanel.class).get("user",

    ""));

    pass.setText(NbPreferences.forModule(UsermanagementPanel.class).get("pass",

    ""));

    }

    In that part of the code the NetBeans Preferences are used to fill the textfields.

    5.

    When you start your application you will find your new options panel in 'Tools > Options > Miscellaneous'.

    You can also enter a password and an username now. When your restart your application you will see that

    these changes are persistant.

    Now our mini user management is complete. We have one user with one password.

    Use MD5 To Encrypt PasswordHere we will show you the encryption of your password with the MD5 algorithm.

    A very good possibility to make your system safer is to encrypt your password with an algorithm called MD5.

    The 'Message-Digest Algorithm 5' is a cryptographic hash-function that was invented by Roland L. Rivest. To

    use MD5 in our application we can use some features of Java. The java.security package will help us.

    But we have a problem with our created options panel. A MD5-Hash cannot be decrypted in a string. It is only

    possible to compare two MD5 values. So if you want to use this, you have to do some changes on your code

    in the 'store' method.

    void store() {

    NbPreferences.forModule(UsermanagementPanel.class).put("user",

    user.getText());

    if(NbPreferences.forModule(UsermanagementPanel.class).get("pass",

    "").equals(pass.getText())){

    //do nothing with password

    } else {

    try {

    String passwordMD5 = null;

    MessageDigest md5 = MessageDigest.getInstance("MD5");

    byte[] tmp = pass.getText().getBytes();

    md5.update(tmp);

    passwordMD5 = byteArrToString(md5.digest());

    NbPreferences.forModule(UsermanagementPanel.class).put("pass",

    passwordMD5);

    } catch (NoSuchAlgorithmException ex) {

    Exceptions.printStackTrace(ex);

    }

    Beans NetBeans Platform Login Tutorial http://platform.netbeans.org/tutorials/60/nbm-login.html

    12 06-03-2012 22:18

  • 8/2/2019 NetBeans NetBeans Platform Login Tutorial

    4/12

    }

    }

    private static String byteArrToString(byte[] b){

    String res = null;

    StringBuffer sb = new StringBuffer(b.length * 2);

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

    int j = b[i] & 0xff;

    if (j < 16) {

    sb.append('0');

    }

    sb.append(Integer.toHexString(j));

    }

    res = sb.toString();

    return res.toUpperCase();

    }

    Your entered password will now be created as a MD5-hash. The second method creates a proper string

    representation and it is needed to avoid non-printable characters.

    Other PossibilitiesIn this section we will show you the encryption of your password with the SHA-1 algorithm.

    Another possibility is to use the SHA-1 instead of the MD5. SHA-1 (secure hash algorithm) was decrypted in

    2006 but for our purpose it is safe enough. You just have to do some little changes on the MD5 code shown

    above.

    void store() {NbPreferences.forModule(UsermanagementPanel.class).put("user",

    user.getText());

    if(NbPreferences.forModule(UsermanagementPanel.class).get("pass",

    "").equals(pass.getText())){

    //do nothing with password

    } else {

    try {

    String passwordSHA = null;

    MessageDigest sha = MessageDigest.getInstance("SHA-1");

    byte[] tmp = pass.getText().getBytes();

    sha.update(tmp);

    passwordMD5 = byteArrToString(sha.digest());

    NbPreferences.forModule(UsermanagementPanel.class).put("pass",

    passwordMD5);

    } catch (NoSuchAlgorithmException ex) {

    Exceptions.printStackTrace(ex);

    }

    }}

    The only real change is to use the java MessageDigist to create an instance of a SHA-1 instead of a MD5.

    To secure the application a little bit you should save your usernames and passwords somewhere else than in

    a preferences file. Maybe a database or a file on a safe server will be a better way.

    Creating The Login Module

    Now we are ready to start with the actual login module.

    First we have to create a new module again, by right-clicking on the 'Modules' folder in the Module

    Suite. Choose 'Add new...'.

    1.

    Give the new module a name like 'Login' and click Next.2.

    Change the 'Code Base Name' if it is needed. Click Finish.3.

    When the new module is located in the Projects window, right-click on the 'Source Packages' and

    choose 'New' > 'Other...'.

    4.

    In the appearing wizard select 'Module Development' as a category and then 'Module Installer' as

    file-type. Click Next.

    5.

    Now you see again which files are changed or created. Click Finish.6.

    Now your Projects window should look as follows:

    If you open the Installer.java you should see this:

    package org.yourorghere.login;

    Beans NetBeans Platform Login Tutorial http://platform.netbeans.org/tutorials/60/nbm-login.html

    12 06-03-2012 22:18

  • 8/2/2019 NetBeans NetBeans Platform Login Tutorial

    5/12

    import org.openide.modules.ModuleInstall;

    /**

    * Manages a module's lifecycle. Remember that an installer is optional and

    * often not needed at all.

    */

    public class Installer extends ModuleInstall {

    @Override

    public void restored() {

    // By default, do nothing.

    // Put your startup code here.

    }

    }

    The code that we will write in the restored() method will be called before the application starts. So we will

    use this to show our login form. But this form has to be created first.

    Right-click the 'Source Packages' and choose 'New' > 'Other...'.1.

    Select 'Swing GUI Forms' as category and 'JPanel Form' as filetype. Click Next.2.

    Give the form a name like 'LoginFrame' and select the correct package. Click Finish.3.

    If it has not been opened yet, open the LoginFrame and go to the Design-View.4.

    Get two labels, a textfield and a password field.5.

    Name the labels 'Username' and 'Password', delete the text in the fields and rename the variables of

    the fields to 'user' and 'pass'.

    6.

    Now we can call our LoginForm in the Installer.java. Go to the Installer.java and add a private field

    LoginForm form = new LoginForm().

    Now we have to call something in the restored()method. For our login dialog we will use the

    NotifyDescriptor from the NetBeans API.

    Add the following code to the restored() method in the Installer.java:

    NotifyDescriptor nd = new NotifyDescriptor.Message("Ok");DialogDisplayer.getDefault().notifyLater(nd);

    And then fix the imports.

    1.

    But you will see that the import cannot be fixed. The reason for this is that we must add the specific

    packages to our project. Right-click the 'Login' module name and choose 'Properties'.

    2.

    Go to the 'Libraries' category and click 'Add Dependency...'.3.

    In the filter textfield write 'notify'.4.

    Now you will see that there is a 'Dialogs API'. Select it and click OK.5.

    Close the 'Properties' window by clicking OK.6.

    Now try to fix the imports again and you will see that it works.7.

    When you start the application you will see that there is a dialog with an 'OK' button in it. This will be the

    dialog where we will call our LoginForm.

    To create a better structure we will create a new method that will be called in the restored() method.

    We do not want to have a simple dialog, but a diaolg with an 'OK' and a 'Cancel' button. For this purpose we

    will use the Confirmation method instead of the Message method of the NotifyDescriptor. The changed class

    Installer should look like this:

    /*

    * To change this template, choose Tools | Templates

    * and open the template in the editor.

    */

    package org.yourorghere.login;

    import org.openide.DialogDisplayer;

    import org.openide.NotifyDescriptor;

    import org.openide.modules.ModuleInstall;

    /**

    * Manages a module's lifecycle. Remember that an installer is optional and

    * often not needed at all.*/

    public class Installer extends ModuleInstall {

    private LoginForm form = new LoginForm();

    @Override

    public void restored() {

    createLoginDialog();

    Beans NetBeans Platform Login Tutorial http://platform.netbeans.org/tutorials/60/nbm-login.html

    12 06-03-2012 22:18

  • 8/2/2019 NetBeans NetBeans Platform Login Tutorial

    6/12

    }

    private void createLoginDialog(){

    NotifyDescriptor nd = new NotifyDescriptor.Confirmation(form, "Login");

    DialogDisplayer.getDefault().notifyLater(nd);

    }

    }

    There you see that our 'LoginForm' form is given to the NotifyDescriptor.Confirmation()method as a

    parameter. The second parameter is the title of the dialog window. If we now look at our created login panel

    we will see that the NotifyDescriptor has created some buttons for us. That is great but these are not the

    buttons we actually want.

    For a login we only want to have an 'OK' and a 'Cancel' button. So we have to create them. This time we

    cannot use the graphical designer, so we have to code it ourselves which is not as difficult as it maybe

    sounds. You only have to change our createLoginDialog() method.

    private void createLoginDialog(){

    JButton ok = new JButton();ok.setText("OK");

    JButton cancel = new JButton();

    cancel.setText("Cancel");

    cancel.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent arg0) {

    //close whole application

    }

    });

    ok.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent arg0) {

    //authenicate username and password

    }

    });

    NotifyDescriptor nd = new NotifyDescriptor.Confirmation(form, "Login");

    nd.setOptions(new Object[]{ok, cancel});DialogDisplayer.getDefault().notifyLater(nd);

    }

    These new changes will create two new buttons and the setOptions() method will add them to our

    NotifyDescriptor. Of course, these buttons do actually nothing. The 'Cancel' button should close the whole

    application. So we will write an exit() method that is called in the actionPerformed() method.

    private void exit(){

    LifecycleManager.getDefault().exit();

    }

    This method will close the application immediately. So when you look at your application closely you will see

    that we have three buttons. The 'x' is also a button and closes the dialog window, but not the whole

    application. So we have to listen to an action that closes this dialog. We will do this if we add the following

    code to our createLoginDialog() method.

    nd.addPropertyChangeListener(new PropertyChangeListener(){

    public void propertyChange(PropertyChangeEvent evt){

    if(NotifyDescriptor.CLOSED_OPTION.equals(evt.getNewValue())){

    exit();

    }

    }

    });

    This listener will close the whole application if the dialog is closed in another way than with the 'Cancel' or the

    'OK' button.

    Now we have to deal with our 'OK' button and what to happen when clicking on it. We will create a new

    method that we will call authenticate(). In this method we need to compare our given passwords and

    usernames of the formular and the ones of the options panel. For this purpose we will call the

    authenticate() method with two parameters, namely the username and the password of our LoginForm. If

    we want to do so we need to alter the LoginForm.java and add two getters for the values of the textfields. In

    this term we must not forget that we need a MD5 compatible form (of course, only when you have added asecurity mechanism). But our getters should only return a normal string for the username and a char-array

    from the password field.

    public String getUsername(){

    return this.user.getText();

    Beans NetBeans Platform Login Tutorial http://platform.netbeans.org/tutorials/60/nbm-login.html

    12 06-03-2012 22:18

  • 8/2/2019 NetBeans NetBeans Platform Login Tutorial

    7/12

    }

    public char[] getPassword(){

    return this.pass.getPassword();

    }

    As mentioned before we now have to create a method called authenticate() where we compare

    usernames and passwords.

    private void authenticate(){

    if(NbPreferences.forModule(UsermanagementPanel.class).get("user",

    "").equals(this.form.getUsername())){

    try {

    char[] passwordFromForm = null;

    char[] passwordFromPref =

    NbPreferences.forModule(UsermanagementPanel.class).get("pass", "").toCharArray();

    String passwordPref = new String(this.form.getPassword());

    MessageDigest md5 = MessageDigest.getInstance("MD5");

    byte[] tmp = passwordPref.getBytes();

    md5.update(tmp);

    passwordFromForm = byteArrToString(md5.digest()).toCharArray();

    int correctCount = 0;

    if(passwordFromForm.length != passwordFromPref.length){

    exit();

    }

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

    if (passwordFromPref[i] == passwordFromForm[i]) {

    correctCount++;

    }

    }

    if (passwordFromPref.length == correctCount) {

    //do nothing here

    } else {

    exit();

    }

    } catch (NoSuchAlgorithmException ex) {

    Exceptions.printStackTrace(ex);

    }

    } else {

    exit();

    }

    }

    In this method the usernames are compared at first. If the username is wrong the password will not be

    checked at all. If the username is correct then the password will be compared character by character. But at

    first it has to be converted in a MD5 hash. This works exactly like in the UsermanagementPanel.java. We

    also need the byteArrToString() method in this class we have created above.

    A problem that might occurs is that the Preference file cannot be read. To get the file access follow these

    steps.

    Right-click our 'UserManagement' module and select 'Properties'.1.

    Choose 'API-Versioning' as category.2.

    Select our usermanagement-package as 'Punlic Package'. Click OK.3.

    Right-click the 'Login' module and select 'Properties'.4.

    Choose 'Libraries' as category.5.

    Click 'Add dependency...'.6.

    Search in the filter for 'usermanagement'.7.

    If you find it, select our 'UserManagement' module and click OK.8.

    Click OK.9.

    Open the UsermanagementPanel.java and alter the class definition by adding 'public' before the

    'final' keyword.

    10.

    Now you should be able to get the correct imports.

    If you run the application it should work with your given password.

    All The Code At Once

    UsermanagementPanel.javaIn the UsermanagementPanel.javawe create a panel in the options dialog of the NetBeans Platform to

    manage our username and password. Most of the code is created by the NetBeans IDE.

    package org.yourorghere.usermanagement;

    import java.security.MessageDigest;

    import java.security.NoSuchAlgorithmException;

    import org.openide.util.Exceptions;

    import org.openide.util.NbPreferences;

    public final class UsermanagementPanel extends javax.swing.JPanel {

    private final UsermanagementOptionsPanelController controller;

    Beans NetBeans Platform Login Tutorial http://platform.netbeans.org/tutorials/60/nbm-login.html

    12 06-03-2012 22:18

  • 8/2/2019 NetBeans NetBeans Platform Login Tutorial

    8/12

    UsermanagementPanel(UsermanagementOptionsPanelController controller) {

    this.controller = controller;

    initComponents();

    // TODO listen to changes in form fields and call controller.changed()

    }

    /** This method is called from within the constructor to

    * initialize the form.

    * WARNING: Do NOT modify this code. The content of this method is

    * always regenerated by the Form Editor.

    */

    private void initComponents() {

    jLabel1 = new javax.swing.JLabel();

    jLabel2 = new javax.swing.JLabel();

    user = new javax.swing.JTextField();

    pass = new javax.swing.JTextField();

    org.openide.awt.Mnemonics.setLocalizedText(jLabel1, "Username");

    org.openide.awt.Mnemonics.setLocalizedText(jLabel2, "Password");

    org.jdesktop.layout.GroupLayout layout = new

    org.jdesktop.layout.GroupLayout(this);

    this.setLayout(layout);

    layout.setHorizontalGroup(

    layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)

    .add(layout.createSequentialGroup()

    .add(21, 21, 21)

    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)

    .add(jLabel2)

    .add(jLabel1))

    .add(18, 18, 18)

    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)

    .add(pass, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 157,

    Short.MAX_VALUE)

    .add(user, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 157,

    Short.MAX_VALUE))

    .addContainerGap())

    );

    layout.setVerticalGroup(

    layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)

    .add(layout.createSequentialGroup()

    .addContainerGap()

    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)

    .add(jLabel1)

    .add(user, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,

    org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

    org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))

    .add(18, 18, 18)

    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)

    .add(jLabel2)

    .add(pass, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,

    org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

    org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))

    .addContainerGap(35, Short.MAX_VALUE))

    );

    }//

    void load() {

    user.setText(NbPreferences.forModule(UsermanagementPanel.class).get("user", ""));

    pass.setText(NbPreferences.forModule(UsermanagementPanel.class).get("pass", ""));

    }

    private static String byteArrToString(byte[] b){

    String res = null;

    StringBuffer sb = new StringBuffer(b.length * 2);

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

    int j = b[i] & 0xff;

    if (j < 16) {

    sb.append('0');

    }

    sb.append(Integer.toHexString(j));

    }

    res = sb.toString();

    return res.toUpperCase();

    }

    void store() {

    NbPreferences.forModule(UsermanagementPanel.class).put("user",user.getText());

    if(NbPreferences.forModule(UsermanagementPanel.class).get("pass",

    "").equals(pass.getText())){

    //do nothing with password

    } else {

    try {

    Beans NetBeans Platform Login Tutorial http://platform.netbeans.org/tutorials/60/nbm-login.html

    12 06-03-2012 22:18

  • 8/2/2019 NetBeans NetBeans Platform Login Tutorial

    9/12

    String passwordMD5 = null;

    MessageDigest md5 = MessageDigest.getInstance("MD5");

    byte[] tmp = pass.getText().getBytes();

    md5.update(tmp);

    passwordMD5 = byteArrToString(md5.digest());

    NbPreferences.forModule(UsermanagementPanel.class).put("pass",

    passwordMD5);

    } catch (NoSuchAlgorithmException ex) {

    Exceptions.printStackTrace(ex);

    }

    }

    }

    boolean valid() {

    // TODO check whether form is consistent and complete

    return true;

    }

    // Variables declaration - do not modify

    private javax.swing.JLabel jLabel1;

    private javax.swing.JLabel jLabel2;

    private javax.swing.JTextField pass;

    private javax.swing.JTextField user;

    // End of variables declaration

    }

    LoginForm.javaThe LoginForm.java creates a dialog in which the password and username can be entered to start your

    application. This class is also quickly created when you use the tools of the NetBeans IDE.

    /*

    * LoginForm.java

    *

    * Created on 03. Dezember 2007, 21:39

    */

    package org.yourorghere.login;

    /**

    *

    * @author Christof and Sabine

    */

    public class LoginForm extends javax.swing.JPanel {

    /** Creates new form LoginForm */

    public LoginForm() {

    initComponents();

    }

    /** This method is called from within the constructor to

    * initialize the form.

    * WARNING: Do NOT modify this code. The content of this method is

    * always regenerated by the Form Editor.

    */

    //

    private void initComponents() {

    jLabel1 = new javax.swing.JLabel();

    jLabel2 = new javax.swing.JLabel();

    user = new javax.swing.JTextField();

    pass = new javax.swing.JPasswordField();

    jLabel1.setText(org.openide.util.NbBundle.getMessage(LoginForm.class,

    "LoginForm.jLabel1.text")); // NOI18N

    jLabel2.setText(org.openide.util.NbBundle.getMessage(LoginForm.class,

    "LoginForm.jLabel2.text")); // NOI18N

    user.setText(org.openide.util.NbBundle.getMessage(LoginForm.class,

    "LoginForm.user.text")); // NOI18N

    pass.setText(org.openide.util.NbBundle.getMessage(LoginForm.class,

    "LoginForm.pass.text")); // NOI18N

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);

    this.setLayout(layout);

    layout.setHorizontalGroup(

    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

    .addGroup(layout.createSequentialGroup()

    .addContainerGap()

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

    .addComponent(jLabel2)

    .addComponent(jLabel1))

    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

    Beans NetBeans Platform Login Tutorial http://platform.netbeans.org/tutorials/60/nbm-login.html

    12 06-03-2012 22:18

  • 8/2/2019 NetBeans NetBeans Platform Login Tutorial

    10/12

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,

    false)

    .addComponent(pass)

    .addComponent(user, javax.swing.GroupLayout.DEFAULT_SIZE, 148,

    Short.MAX_VALUE))

    .addContainerGap(31, Short.MAX_VALUE))

    );

    layout.setVerticalGroup(

    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

    .addGroup(layout.createSequentialGroup()

    .addContainerGap()

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

    .addComponent(jLabel1)

    .addComponent(user, javax.swing.GroupLayout.PREFERRED_SIZE,

    javax.swing.GroupLayout.DEFAULT_SIZE,

    javax.swing.GroupLayout.PREFERRED_SIZE))

    .addGap(18, 18, 18)

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

    .addComponent(jLabel2)

    .addComponent(pass, javax.swing.GroupLayout.PREFERRED_SIZE,

    javax.swing.GroupLayout.DEFAULT_SIZE,

    javax.swing.GroupLayout.PREFERRED_SIZE))

    .addContainerGap(30, Short.MAX_VALUE))

    );

    }//

    public String getUsername(){

    return this.user.getText();

    }

    public char[] getPassword(){

    return this.pass.getPassword();

    }

    // Variables declaration - do not modify

    private javax.swing.JLabel jLabel1;

    private javax.swing.JLabel jLabel2;

    private javax.swing.JPasswordField pass;

    private javax.swing.JTextField user;

    // End of variables declaration

    }

    Installer.javaThis class starts the LoginPanel.java and handels the response to this dialog. It also takes care about the

    authentication.

    /*

    * To change this template, choose Tools | Templates

    * and open the template in the editor.

    */

    package org.yourorghere.login;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import java.beans.PropertyChangeEvent;

    import java.beans.PropertyChangeListener;

    import java.security.MessageDigest;

    import java.security.NoSuchAlgorithmException;

    import javax.swing.JButton;

    import org.openide.DialogDisplayer;

    import org.openide.LifecycleManager;

    import org.openide.NotifyDescriptor;

    import org.openide.modules.ModuleInstall;

    import org.openide.util.Exceptions;

    import org.openide.util.NbPreferences;

    import org.yourorghere.usermanagement.UsermanagementPanel;

    /**

    * Manages a module's lifecycle. Remember that an installer is optional and

    * often not needed at all.

    */

    public class Installer extends ModuleInstall {

    private LoginForm form = new LoginForm();

    @Override

    public void restored() {

    createLoginDialog();

    }

    private void createLoginDialog(){

    JButton ok = new JButton();

    ok.setText("OK");

    JButton cancel = new JButton();

    cancel.setText("Cancel");

    Beans NetBeans Platform Login Tutorial http://platform.netbeans.org/tutorials/60/nbm-login.html

    f 12 06-03-2012 22:18

  • 8/2/2019 NetBeans NetBeans Platform Login Tutorial

    11/12

    Send Us Your Feedback

    cancel.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent arg0) {

    exit();

    }

    });

    ok.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent arg0) {

    authenticate();

    }

    });

    NotifyDescriptor nd = new NotifyDescriptor.Confirmation(form, "Login");

    nd.setOptions(new Object[]{ok, cancel});

    DialogDisplayer.getDefault().notifyLater(nd);

    nd.addPropertyChangeListener(new PropertyChangeListener(){

    public void propertyChange(PropertyChangeEvent evt){

    if(NotifyDescriptor.CLOSED_OPTION.equals(evt.getNewValue())){

    exit();

    }

    }

    });

    }

    private void authenticate(){

    if(NbPreferences.forModule(UsermanagementPanel.class).get("user",

    "").equals(this.form.getUsername())){

    try {

    char[] passwordFromForm = null;

    char[] passwordFromPref =

    NbPreferences.forModule(UsermanagementPanel.class).get("pass", "").toCharArray();

    String passwordPref = new String(this.form.getPassword());

    MessageDigest MD5 = MessageDigest.getInstance("MD5");

    byte[] tmp = passwordPref.getBytes();

    MD5.update(tmp);

    passwordFromForm = byteArrToString(MD5.digest()).toCharArray();

    int correctCount = 0;

    if(passwordFromForm.length != passwordFromPref.length){

    exit();

    }

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

    if (passwordFromPref[i] == passwordFromForm[i]) {

    correctCount++;

    }

    }

    if (passwordFromPref.length == correctCount) {

    //do nothing here

    } else {

    exit();

    }

    } catch (NoSuchAlgorithmException ex) {

    Exceptions.printStackTrace(ex);

    }

    } else {

    exit();

    }

    }

    private static String byteArrToString(byte[] b){

    String res = null;

    StringBuffer sb = new StringBuffer(b.length * 2);

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

    int j = b[i] & 0xff;

    if (j < 16) {

    sb.append('0');

    }

    sb.append(Integer.toHexString(j));

    }

    res = sb.toString();

    return res.toUpperCase();

    }

    final private void exit(){

    LifecycleManager.getDefault().exit();

    }

    }

    Next Steps

    For more information about creating and developing NetBeans modules, see the

    following resources:

    Other Related Tutorials

    NetBeans API Javadoc

    Versioning

    Christof Hll, Sabine Weiss; Johannes Kepler University Linz, Austria

    Beans NetBeans Platform Login Tutorial http://platform.netbeans.org/tutorials/60/nbm-login.html

    f 12 06-03-2012 22:18

  • 8/2/2019 NetBeans NetBeans Platform Login Tutorial

    12/12

    Shop SiteMap About Us Contact Legal

    Version Date Changes Open I ssues

    1 05 January 2008 Initial version

    Companion

    Projects:

    By use of this website, you agree to the NetBeans Policies and Terms of Use (revision 20120224.bfbd7ec)

    Beans NetBeans Platform Login Tutorial http://platform.netbeans.org/tutorials/60/nbm-login.html