Avatar billede millekolding Nybegynder
30. december 2011 - 10:06 Der er 7 kommentarer og
1 løsning

beskrivelse af login-funktion.

Jeg sidder med en eksamensopgave, hvor jeg skal beskrive en login-funktion, men det er svært at bruge de rigtige termer. Jeg vil høre om der er nogen der kan hjælpe mig? Sender koderne til *.java-filerne: Users.java og UserBean.java nedenfor:

Fra Users.java:

public class Users {
 
private HashMap<String,String> users = new  HashMap<String,String>();
   
  public Users() {
      users.put("Emilie", "51235722");
      users.put("Ida", "Balslev");
      users.put("Mille", "1609902708"); 
}
 
  public  HashMap<String,String> getUsers(){
      return users;
  }

Fra UserBean.java:

public String verifyUI(){
       
    HashMap<String,String> users = new Users().getUsers();
   
    if(users.containsKey(brugernavn) && users.get(brugernavn).equals(password))
    {
        return "forside";
    }
    else {return "failure";}     
    }
   
}
Avatar billede Bdev Nybegynder
30. december 2011 - 12:15 #1
Hej millekolding.

Jeg synes ikke der er meget at beskrive, men det handler om at når en bruger/besøgende forsøger at få adgang til et begrænset område bliver brugeren bedt om at indtaste brugernavn og password.

Disse informationer bliver valideret af systemet. Ved godkendt login får brugeren adgang til det begrænsede område og ved fejl bliver brugeren afvist.

Har du flere spørgsmål kan du kontakte mig på http://www.nolas.dk/webudvikling
Avatar billede michael_stim Ekspert
30. december 2011 - 12:47 #2
#1

Hvorfor ikke holde spørgsmål og svar herinde? Så kan andre også få glæde af det. Det er ligesom det hele sitet er bygget på ;o)
Avatar billede Bdev Nybegynder
30. december 2011 - 12:53 #3
Hej michael_stim.

Du har ret. Spørgsmål og svar bør komme her.

Det var bare et forsøg på at være hjælpsom.

Nolas Consulting
Avatar billede Slettet bruger
30. december 2011 - 17:56 #4
Hvad mener du med "de rigtige termer"?

Til dit kode-eksempel har jeg følgende kommentarer (men det er nok ikke det du søger svar på):
- Users klassen bør du lave til en singleton. Dvs. konstuktoren er private og du har en statisk metode i klassen der returnerer samme instans af Users hver gang.
- Metoden der validerer om brugernavn og password (burde de ikke være argumenter til verifyUI metoden?), kunne du have liggende i Users klassen. Og i stedet for String burde du returnere en boolean.
- Din getUsers() åbner op for at anden kode kan ændre indholdet i din HashMap. Der er heller ikke brug for den, hvis du flytter din verifyUI metode til Users. Ellers bør du sikre dig at din HashMap ikke kan ændres, f.eks. med Collections.unmodifiableMap(users).
Avatar billede arne_v Ekspert
03. januar 2012 - 01:17 #5
For at foelge lidt op paa tolamaps post er her en halvstor portion kode, som illusterer en masse interessante ideer.

Jeg har dog en mistanke om at det er lidt for komplekst til dit behov.

UserBean.java


package demo.login;

import java.io.Serializable;

public class UserBean implements Serializable, Comparable<UserBean> {
    private static final long serialVersionUID = 1L;
    private String username;
    private String password;
    public UserBean(String username, String password) {
        this.username = username;
        this.password = password;
    }
    public String getUsername() {
        return username;
    }
    public String getPassword() {
        return password;
    }
    @Override
    public boolean equals(Object obj) {
        if(this == obj) return true;
        if(obj == null) return false;
        return (obj instanceof UserBean) && ((UserBean)obj).username.equals(username);
    }
    @Override
    public int hashCode() {
        return username.hashCode();
    }
    public int compareTo(UserBean other) {
        return username.compareTo(other.username);
    }
}


LoginService.java


package demo.login;

public interface LoginService {
    public boolean check(String username, String password);
}


LoginProvide.java


package demo.login;

public interface LoginProvider {
    public boolean check(String username, String password);
}


CaseRuls.java


package demo.login;

public interface CaseRules {
    public String convertUsername(String username);
    public String convertPassword(String password);
}


FailureRules.java


package demo.login;

public interface FailureRules {
    public boolean check(String username);
    public void success(String username);
    public void failure(String username);
}


LoginServiceImpl.java


package demo.login.impl;

import demo.login.CaseRules;
import demo.login.FailureRules;
import demo.login.LoginProvider;
import demo.login.LoginService;

public class LoginServiceImpl implements LoginService {
    private LoginProvider loginProvider;
    private CaseRules caseRules;
    private FailureRules failureRules;
    public boolean check(String username, String password) {
        String un = caseRules.convertUsername(username);
        String pw = caseRules.convertPassword(password);
        if(failureRules.check(un)) {
            boolean res = loginProvider.check(un, pw);
            if(res) {
                failureRules.success(un);
            } else {
                failureRules.failure(un);
            }
            return res;
        } else {
            return false;
        }
    }
    public LoginProvider getLoginProvider() {
        return loginProvider;
    }
    public void setLoginProvider(LoginProvider loginProvider) {
        this.loginProvider = loginProvider;
    }
    public CaseRules getCaseRules() {
        return caseRules;
    }
    public void setCaseRules(CaseRules caseRules) {
        this.caseRules = caseRules;
    }
    public FailureRules getFailureRules() {
        return failureRules;
    }
    public void setFailureRules(FailureRules failureRules) {
        this.failureRules = failureRules;
    }
}


HardcodedLoginProvider.java


package demo.login.impl;

import java.util.HashMap;
import java.util.Map;

import demo.login.LoginProvider;

public class HardcodedLoginProvider implements LoginProvider {
    private Map<String,String> userinfo;
    public HardcodedLoginProvider() {
        userinfo = new  HashMap<String,String>();
        userinfo.put("emilie", "51235722");
        userinfo.put("ida", "Balslev");
        userinfo.put("mille", "1609902708");
    }
    public boolean check(String username, String password) {
        return userinfo.containsKey(username) && userinfo.get(username).equals(password);
    }
}


StandardCaseRules.java


package demo.login.impl;

import demo.login.CaseRules;

public class StandardCaseRules implements CaseRules {
    public String convertUsername(String username) {
        return username.trim().toLowerCase();
    }
    public String convertPassword(String password) {
        return password.trim();
    }
}


MaxOutFailureRules.java


package demo.login.impl;

import java.util.HashMap;
import java.util.Map;

import demo.login.FailureRules;

public class MaxOutFailureRules implements FailureRules {
    private Map<String, Integer> failures = new HashMap<String,Integer>();
    private int maxfail;
    public MaxOutFailureRules(int maxfail) {
        this.maxfail = maxfail;
    }
    public boolean check(String username) {
        return !(failures.containsKey(username) && (failures.get(username) > maxfail));
    }
    public void success(String username) {
        failures.put(username,  0);
    }
    public void failure(String username) {
        if(!failures.containsKey(username)) failures.put(username, 0);
        failures.put(username, failures.get(username) + 1);
    }
}


LoginTest.java


package test;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

import demo.login.LoginService;

public class LoginTest {
    public static void main(String[] args) {
        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("test/beancfg.xml"));
        LoginService service = (LoginService)factory.getBean("loginService");
        System.out.println(service.check("Mille", "1609902708"));
        System.out.println(service.check("Arne", "glemdet"));
    }
}


beancfg.xml


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <bean id="loginService" class="demo.login.impl.LoginServiceImpl">
        <property name="loginProvider" ref="hardcodedLoginProvider"/>
        <property name="caseRules" ref="standardCaseRules"/>
        <property name="failureRules" ref="threeOutFailureRules"/>
    </bean>
    <bean id="hardcodedLoginProvider" class="demo.login.impl.HardcodedLoginProvider"/>
    <bean id="standardCaseRules" class="demo.login.impl.StandardCaseRules"/>
    <bean id="threeOutFailureRules" class="demo.login.impl.MaxOutFailureRules">
        <constructor-arg value="3"/>
    </bean>
</beans>
Avatar billede millekolding Nybegynder
18. januar 2012 - 20:58 #6
Jeg siger tusind tak for svaret og beklager min sene respons.. Jeg ikke ikke finde ud af at lukke spørgsmål, men dette spørgsmål er nu lukke og ikke nødvendigt at besvare yderligt. Koderne ser fine ud men niveauet er lidt for højt for mig..
Avatar billede arne_v Ekspert
19. januar 2012 - 01:30 #7
M.h.t. at lukke saa skal du have nogen til at smide et svar du kan acceptere.
Avatar billede arne_v Ekspert
19. januar 2012 - 01:31 #8
M.h.t. min kode, saa var jeg godt klar over at det nok ikke lige var det du sogte.
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