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