Avatar billede mulle_dk Nybegynder
03. december 2002 - 10:37 Der er 7 kommentarer

Applet Login: hvordan tilføjer jeg flere brugere?

Hej!

Jeg har siddet og leget med koden til en login applet. Jeg kan dog ikke finde ud af at tilføje flere brugere (+passwords). Indtil videre er der kun en bruger (demo) med passwordet (demo). Er der nogle som kan hjælpe mig med dette?

Hvordan linker jeg denne applet til en anden applet på en let og simpel måde, så det ikke går ud over sikkerheden?




import java.applet.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.util.*;
//import java.net.*;

public class LogIn extends Applet implements ActionListener {

Label lUserName = new Label("Brugernavn:");
TextField tfUserName = new TextField(20);
Label lPassWord = new Label("Kodeord:");    
TextField tfPassWord = new TextField(20);
Button btnLogIn = new Button("Log ind");
Button btnCancel = new Button("Nulstil");

//URL webshop, codebase;

String demoUser = "demo";
String demoPass = "demo";

public void init() {   
   
/*   
try {
    codebase = new URL("http://www.abo.fi/");
    webshop = new URL(codebase, "~magoster/webshop/webshop.html");
    }
catch (MalformedURLException e)
{ getAppletContext().showStatus("Fejlagtig URL:" +e); }   
*/   
   
setFont(new Font("Dialog", Font.PLAIN, 12));
setLayout(new FlowLayout());

//Font og layout
   
add(lUserName);  add(tfUserName);  add(lPassWord);  add(tfPassWord);  add(btnLogIn);  add(btnCancel);

tfUserName.requestFocus();
tfUserName.setBackground(Color.white);

tfPassWord.setEchoChar('*'); 
tfPassWord.setBackground(Color.white);

btnLogIn.addActionListener(this);
btnCancel.addActionListener(this);       
}

public void actionPerformed(ActionEvent theEvent) {
   
if (theEvent.getSource() == btnLogIn)
{
    if ( demoUser.equals(tfUserName.getText())  && demoPass.equals(tfPassWord.getText()) )
    {
            //getAppletContext().showDocument(webshop);
            //Frame w = new WebShop();
            //w.setLocation(100,100);
            //w.setSize(315,620);
            //w.setTitle("Databutiken - välj varor");
            //w.setIconImage(webshopIcon);
            //w.show();
            tfUserName.setText("");
            tfPassWord.setText("");
    }
    else if ( demoUser.equals(tfUserName.getText())  && !(demoPass.equals(tfPassWord.getText())) )
    {
        tfUserName.setText("Fejl i kodeord!");
        tfPassWord.setText("");
    }
    else
    {
        tfUserName.setText("Fejl i brugernavn!");
        tfPassWord.setText("");
    }
}

if (theEvent.getSource() == btnCancel)
{
    tfUserName.setText("");
    tfUserName.requestFocus();
    tfPassWord.setText("");
}

} // actionPerformed()
} // class LogIn
Avatar billede disky Nybegynder
03. december 2002 - 10:50 #1
eftersom username/password ligger i din applet er der faktisk ingen sikkerhed.

Den kan let dekompiles, og så kan man se hvad username/password.

Jeg håber det kun er et forsøg og ikke noget der reelt skal bruges.
Avatar billede disky Nybegynder
03. december 2002 - 10:51 #2
Du kan ikke umiddelbart linke til en anden applet, men du kan tvinge browseren der har åbnet din applet, til at loade en ny HTML side, der så har en anden applet i sig.
Avatar billede carstenknudsen Nybegynder
03. december 2002 - 11:39 #3
Hvis det for "sjov" kan du til dels løse dit problem
ved at hardcode et md5 digest af passwordet, det kan
godt ses, men man kan ikke gætte passwordet fra det.
Du skriver et lille program der har det hemmelige
password:
String password = ...;
byte[] passwordBytes = password.getBytes();
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] digest = md5.digest(passwordBytes);
Denne array skal du have skrevet ud og hardcodet i
din applet, se nedenfor.

I din applet skal du have følgende:
(Husk at du skal have et import statement: import java.security.*;
også ovenfor)
String enteredPassword = ...; // fra gui
byte[] enteredPasswordBytes = password.getBytes();
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] digest = md5.digest(enteredPasswordBytes);
byes[] hardcodedPasswordBytes = new byte[] {.,.,.,.,.,.};
if (java.util.Arrays.equals(digest,hardcodedPasswordBytes)) {
// korrekt password er indtastet
}
Avatar billede mulle_dk Nybegynder
03. december 2002 - 15:08 #4
Hej!
Sikkerheden er ikke det primære i dette program. Skal kun bruges i et projekt.  Derfor gør det ikke noget at kodeord og brugernavn ligger i selve class-filen. Men hvordan koder jeg det, så flere brugere kan benytte det? Indtil videre er det kun Brugeren demo med kodeordet demo, der kan benytte det. I må gerne skrive videre på min kode, så jeg ved hvor det skal sættes ind. Det ville være alletiders. Tak.
Avatar billede disky Nybegynder
03. december 2002 - 15:47 #5
Smid brugernavn og password i en HashMap

Hvor BrugerNavn er key og Password er Value.

Det gør dog at man ikke kan have 2 brugere med samme navn.

Så get'er du når du skal teste, og set'er når du vil oprette nye brugere.
Avatar billede carstenknudsen Nybegynder
04. december 2002 - 09:45 #6
I kan som foreslået af disky bruge en hashmap til
at gemme brugernavne og passwords. Tilføj til jeres
kode f.eks. følgende.
String[] userNames = new String[] {"allan","brian","carsten","dan"};
String[] passwords = new String[] {"allanspassword","brianspassword",""carstenspassword,"sdanpassword"};
HashMap map = new HashMap();
for (int i = 0; i < userNames.length; i++) {
try {
map.put(userNames[i],password[i]);
}
catch (ArrayIndexOutOfBoundsException e) {
}
}
Hvor I checker for brugernavn og password skriver I i stedet:
String userName = tfUserName.getText();
String password = map.get(userName);
if (password!=null) { // der er en bruger med det navn
if (password.equals(tfPassWord.getText())) {
// korrekt password til brugernavn
}
else { // forkert password for brugeren
}
}
else { // der er ingen bruger med det navn
}
Avatar billede carstenknudsen Nybegynder
04. december 2002 - 09:52 #7
For en god ordens skyld skal jeg bemærke at
ovenstående hverken er specielt generelt eller effektivt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester